无法使以下标准代码生效。寻找完整的示例项目或有关如何发布bug的帮助。 以下代码......
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
if (filterContext.HttpContext.Session != null)
{
if (filterContext.HttpContext.Session.IsNewSession)
{
string cookie = filterContext.HttpContext.Request.Headers["Cookie"];
if ((cookie != null) && (cookie.IndexOf("_sessionId") >= 0))
{
filterContext.Result = newRedirectResult("~/SessionExpired/Index"); //redirect anywhere to message user UI , never hits this breakpoint
return;
}
}
}
base.OnActionExecuting(filterContext);
}
是检查会话到期的标准。
但在我的情况下,行(cookie != null) && (cookie.IndexOf("_sessionId") >= 0)
始终返回false ,因此用户永远不会被重定向。
我正在测试一个全新的向导创建的MVC 4项目。 我找不到完整的下载示例。我怀疑我的配置是错的。
<authentication mode="Forms">
<forms loginUrl="~/Account/Login" timeout="1" slidingExpiration="true" name=".ASPXFORMSAUTH" />
</authentication>
<sessionState mode="InProc" timeout="1" cookieless="false"/>
请告知此代码失败的原因或提供完整下载示例项目的链接。 .Net 4.5 | VS 2012 |本地IIS Web服务器,IIS Express
答案 0 :(得分:1)
尝试将“_sessionId”中的“s”大写
像:
sessionCookie.IndexOf("_SessionId") >= 0)
搜索区分大小写。 此外,您所指的链接文章使用:
sessionCookie.IndexOf("ASP.NET_SessionId") >= 0)
答案 1 :(得分:1)
这是一个非常晚的答案,但它可能对其他人有帮助。
如果我没有弄错,为了使这种方法起作用,表单身份验证超时必须设置为比会话本身更高的时间。这样,当您创建新会话(在服务器内存中)时,来自身份验证的cookie仍将存在于用户的计算机中,以指示用户最近已注册。
您应该尝试以下方法:
<authentication mode="Forms">
<forms loginUrl="~/Account/Login" timeout="1000" slidingExpiration="true" name=".ASPXFORMSAUTH" />
</authentication>
<sessionState mode="InProc" timeout="10" cookieless="false"/>