我有一個MVC ASP.NET
項目,並有操作篩選屬性以下ASP.NET_SessionId的cookie行爲的解釋
public override void OnActionExecuting(System.Web.Mvc.ActionExecutingContext filterContext)
{
HttpContext ctx = HttpContext.Current;
if (ctx.Session != null)
{
if (ctx.Session.IsNewSession)
{
string sessionCookie = ctx.Request.Headers["Cookie"];
if ((null != sessionCookie) && (sessionCookie.IndexOf("ASP.NET_SessionId") >= 0))
{
if (filterContext.HttpContext.Request.IsAjaxRequest())
{
filterContext.Result = new JsonResult { Data = "Session Timeout. Redirecting...", ContentType = "application/json" };
filterContext.HttpContext.Response.StatusCode = 440;
}
else
{
filterContext.Result = new RedirectToRouteResult(
new RouteValueDictionary
{
{ "Controller", "Error" },
{ "Action", "SessionTimeout" }
});
}
}
}
}
}
我所試圖做的是重定向到SessionTimeout
作用,這顯示一個錯誤頁面每當IIS會話超時出。
它的大部分工作正常,但我發現,有時候,尤其是我第一次啓動該應用程序,此代碼將運行到else
塊,從而重定向到錯誤頁面是不必要的,因爲這是時間來自用戶的第一次訪問。
(這裏「第一」是指自最後一次足夠長的時間運行的應用程序,比如說幾天)
碰上else
塊,這意味着會議是一個新的會話但也存在ASP.NET_SessionId
Cookie。
我的問題是:爲什麼會發生這種情況?預計這種行爲是否正常&?
(以行爲是好的,我不需要一個解決方案,只是一些解釋......)
謝謝......這是多一點清楚我現在。關閉瀏覽器(爲了刪除這個會話cookie),是否意味着關閉瀏覽器的所有選項卡? (我正在使用Chrome) – shole
是的,不同的瀏覽器標籤通常共享相同的客戶端會話。即使不同的瀏覽器窗口通常共享相同的客戶端會話 – user1429080