Asp.net mvc 4 MVC4检测会话超时
无法使以下标准代码正常工作。寻找一个完整的样本项目或帮助如何错误。 下面的代码Asp.net mvc 4 MVC4检测会话超时,asp.net-mvc-4,Asp.net Mvc 4,无法使以下标准代码正常工作。寻找一个完整的样本项目或帮助如何错误。 下面的代码 public override void OnActionExecuting(ActionExecutingContext filterContext) { if (filterContext.HttpContext.Session != null) { if (filterContext.HttpContext.Session.IsNewSession) {
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(“\u sessionId”)>=0)
总是返回false,因此用户永远不会被重定向
我正在用一个全新的向导创建的MVC4项目进行测试。
我找不到完整的下载示例。我怀疑我的配置是错的
<authentication mode="Forms">
<forms loginUrl="~/Account/Login" timeout="1" slidingExpiration="true" name=".ASPXFORMSAUTH" />
</authentication>
<sessionState mode="InProc" timeout="1" cookieless="false"/>
尝试将“\u sessionId”中的“s”大写
比如:
搜索区分大小写。
此外,您所指的链接文章使用:
sessionCookie.IndexOf("ASP.NET_SessionId") >= 0)
这是一个非常晚的答案,但它可能会帮助其他人
如果我没有弄错的话,为了使这种方法起作用,表单身份验证超时必须设置为比会话本身更长的时间。这样,当您创建新会话(在服务器内存中)时,来自身份验证的cookie仍将存在于用户的计算机中,以指示用户最近被登录
您应该尝试以下方法:
<authentication mode="Forms">
<forms loginUrl="~/Account/Login" timeout="1000" slidingExpiration="true" name=".ASPXFORMSAUTH" />
</authentication>
<sessionState mode="InProc" timeout="10" cookieless="false"/>
<authentication mode="Forms">
<forms loginUrl="~/Account/Login" timeout="1000" slidingExpiration="true" name=".ASPXFORMSAUTH" />
</authentication>
<sessionState mode="InProc" timeout="10" cookieless="false"/>