我有一个 MVC4 单一应用程序页面。登录页面有 3 个字段:用户、密码和“记住我”复选框。 C#登录代码是这样的:
if (WebSecurity.Login(model.UserName, model.Password, persistCookie: model.RememberMe))
{
FormsAuthentication.SetAuthCookie(model.UserName, model.RememberMe);
return Json(new { success = true, redirect = returnUrl });
}
else
{
ModelState.AddModelError("", "The user name or password provided is incorrect.");
}
我想这样做:
如果用户使用“记住我”登录true - Cookie 将保留到用户注销为止。
如果用户使用“记住我”登录false - Cookie 将在 3 小时后过期。
在 web.config 中我有以下代码:
<authentication mode="Forms">
<forms loginUrl="~/" timeout="180" cookieless="UseCookies" slidingExpiration="false" />
</authentication>
<sessionState timeout="180" />
问题是当用户短时间内(通常是 10-30 分钟)没有触摸页面,然后用户尝试在页面中执行某些操作时 - 就会出现错误
"Authorization has been denied for this request."
(虽然sessionStation
超过了30分钟!)
用户刷新页面后 - 如果 cookie 尚未过期 - 一切正常。但我当然不想让用户每 15 分钟左右刷新一次页面,它是一个单页面应用程序。
所以,我尝试将 slidingExpiration
更改为“true”并每 17 分钟创建一次 ping(使用 ajax),它确实停止了 session 过期和烦人的消息 - 但 cookie 没有3 小时后过期(我使用“记住我”“错误”登录)!
我能做什么?
最佳答案
从 IIS 管理控制台右键单击您的应用程序池,然后查找“空闲超时(分钟)”。
您可以将该设置调整为 0(零),这将有效禁用超时,以便应用程序池永远不会因空闲而关闭。
关于c# - .NET 中的 Cookie 和 session 过期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28134459/