ASP.NET MVC判断基于Cookie的Session过期

当我们第一次请求访问时,可以看到Response的Set-Cookie里添加了ASP.NET_SessionId的值,以后再访问时可以看到Resquest里的Cookie已经包含这个Key.

image image

Session的IsNewSession可以判断这次请求是否第一次访问, 所以如果是第一次访问而且cookie里包含ASP.NET_SessionId,那么可以判断Session已经过期

因此我们可以写一个如下的一个Filter加在需要判断过期的Action上,当然如果所有Action都需要处理我们可以让所有的Controller集成一个BaseController,在BaseController的OnActionExecuting方法里做, 请参考如下代码

public class SessionTimeOutFilterAttribute : ActionFilterAttribute

{

   public override void OnActionExecuting(ActionExecutingContext filterContext)

   {

       HttpContextBase ctx = filterContext.HttpContext;

       if (ctx.Session != null)

       {

           if (ctx.Session.IsNewSession)

           {

               string sessionCookie = ctx.Request.Headers["Cookie"];

               if ((null != sessionCookie) && (sessionCookie.IndexOf("ASP.NET_SessionId") >= 0))

               {

                   ctx.Response.Redirect("~/Search/Index");

               }

           }

       }

       base.OnActionExecuting(filterContext);

   }

}

你可能感兴趣的:(asp.net)