MVC3 Cookie的滑动过期不起作用
本文关键字:过期 不起作用 Cookie MVC3 | 更新日期: 2023-09-27 18:24:45
我在MVC3应用程序中使用内置的Forms身份验证。我目前面临的问题是Cookie slidingexpiration
不起作用。
web.config文件有以下行:
<forms loginUrl="/auth" name="authy" path="/" slidingExpiration="true" />
注意:我已经声明了slidingexpiration
,尽管默认值为true。
在我的代码中,我使用了基本的Membership Provider类,没有扩展或修改。我的global.asax文件使用系统默认值。
添加代码示例毫无意义,因为这只是一个没有添加额外代码的基础项目。我最初使用FormsAuthentication.SetAuthCookie(username, true);
设置cookie。
文档中的报价:
滑动过期重置有效如果发出请求并且超时间隔已过。如果cookie过期,用户必须重新验证。将SlidingExpiration属性设置为false可以通过限制基于配置的超时,身份验证cookie是有效的价值
在这句话中需要注意的两件非常重要的事情:
- 如果提出请求
- 超时间隔的一半
您尚未指定超时,因此将使用默认值30分钟。
在这句话中需要注意的另一件重要事情:
将SlidingExpiration属性设置为false可以提高安全
但我想你不在乎安全,因为你已经激活了它。
更新:
这里有一个完整的例子来说明这个概念:
控制器:
public class HomeController : Controller
{
public ActionResult Index()
{
FormsAuthentication.SetAuthCookie("foo", true);
return View();
}
[Authorize]
public ActionResult Foo()
{
return Json(User.Identity.Name + " is still authenticated", JsonRequestBehavior.AllowGet);
}
}
视图:
<script type="text/javascript">
$(function () {
(function () {
var caller = arguments.callee.caller;
window.setTimeout(function () {
$.getJSON('@Url.Action("foo")', function (result) {
$('#msg').append($('<div/>', { text: result }));
caller();
});
}, 10000);
})();
});
</script>
<div id="msg"></div>
web.config:
<authentication mode="Forms">
<forms
loginUrl="/auth"
name="authy"
path="/"
slidingExpiration="true"
timeout="1"
/>
</authentication>
无论您在"索引"视图上停留多长时间,用户仍将通过身份验证。
将cookieless="UseCookies"
添加到web.config表单属性时。滑动到期现在开始生效。我不明白这怎么会有什么不同,但它已经做了一些事情。我想这只是其中一个怪癖。
我遇到了一个问题,我的滑动到期不起作用。
我把路径设置错了。