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。

MVC3 Cookie的滑动过期不起作用

文档中的报价:

滑动过期重置有效如果发出请求并且超时间隔已过。如果cookie过期,用户必须重新验证。将SlidingExpiration属性设置为false可以通过限制基于配置的超时,身份验证cookie是有效的价值

在这句话中需要注意的两件非常重要的事情:

  1. 如果提出请求
  2. 超时间隔的一半

您尚未指定超时,因此将使用默认值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表单属性时。滑动到期现在开始生效。我不明白这怎么会有什么不同,但它已经做了一些事情。我想这只是其中一个怪癖。

我遇到了一个问题,我的滑动到期不起作用。

我把路径设置错了。