1
我在每個操作上使用SessionExpireFilter來檢查會話是否已過期。如果會話已過期則用戶sessionTimeoutPage即重定向到membershipController和SessionTimeOut查看始終被重定向到SessionTimeOut頁面ASP.net MVC
過濾器看起來喜歡 -
public class SessionExpireFilterAttribute : ActionFilterAttribute
{
/// <summary>
/// Called when [action executing].
/// </summary>
/// <param name="filterContext">The filter context.</param>
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
HttpContext ctx = HttpContext.Current;
// check if session is supported
if (ctx.Session != null)
{
// check if a new session id was generated
if (ctx.Session.IsNewSession)
{
// If it says it is a new session, but an existing cookie exists, then it must
// have timed out
string sessionCookie = ctx.Request.Headers["Cookie"];
if ((null != sessionCookie) && (sessionCookie.IndexOf("ASP.NET_SessionId") >= 0))
{
if (ctx.Request.IsAuthenticated)
{
FormsAuthentication.SignOut();
}
//HttpCookie mycookie = new HttpCookie("ASP.NET_SessionId");
//mycookie.Expires = DateTime.MinValue;
//ctx.Response.Cookies.Add(mycookie);
//ctx.Session.Clear();
RouteValueDictionary redirectTargetDictionary = new RouteValueDictionary();
redirectTargetDictionary.Add("action", "SessionTimeOut");
redirectTargetDictionary.Add("controller", "Membership");
filterContext.Result = new RedirectToRouteResult(redirectTargetDictionary);
}
}
}
base.OnActionExecuting(filterContext);
}
}
的問題是我有一個會員控制器登錄操作方法也有過濾器。它會檢查會話是否過期,並始終找到ASP.NET_SessionId cookie並一次又一次重定向到sessionTimeout頁面(其中有一個鏈接登錄頁面)
這對有人能幫助很大。
我認爲它很好,因爲我正在做登錄和它的全新會話。我遇到的問題是使用ASP.Net_session即使在新的會話中,cookie也總是存在 – Amit
而且,相信我是運行時的工作方式(並且執行登錄與Session無關),只需將事件連接起來即可檢查。 – tpeczek
對不起,但它並沒有通過接線事件 – Amit