【发布时间】:2015-03-23 22:35:49
【问题描述】:
我有一个 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 分钟)没有触摸页面,然后用户尝试在页面中执行某些操作 - 出现错误
“此请求的授权已被拒绝。”
(虽然sessionStation超过30分钟!)
用户刷新页面后 - 如果 cookie 尚未过期 - 一切正常。但是我当然不想让用户每 15 分钟左右刷新一次页面,它是一个单页应用程序。
所以,我尝试将slidingExpiration 更改为“true”并每 17 分钟创建一个 ping(使用 ajax),它确实停止了会话过期和烦人的消息 - 但 cookie 在 3 小时后没有过期(我用记住我'false'登录)!
我能做什么?
【问题讨论】:
标签: c# asp.net-mvc-4 session cookies single-page-application