我有一个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