MVC3滑动过期的cookie无法正常工作

时间:2012-02-14 10:32:15

标签: c# asp.net-mvc-3 membership-provider

我在MVC3应用程序中使用内置的Forms身份验证。我目前面临的问题是Cookie slidingexpiration无效。

web.config 文件包含以下行:

<forms loginUrl="/auth" name="authy" path="/" slidingExpiration="true" />

note ::即使默认值为true,我也声明了slidingexpiration

在我的代码中,我使用的是基本的Membership Provider类,没有扩展或修改。我的 global.asax 文件使用的是系统默认值。

添加代码示例没有意义,因为这只是一个没有添加额外代码的基础项目。我最初使用FormsAuthentication.SetAuthCookie(username, true);设置Cookie。

3 个答案:

答案 0 :(得分:3)

来自documentation

的引用
  

滑动过期会重置有效的过期时间   如果发出请求,则认证cookie超过一半   超时间隔已过。如果cookie过期,则用户必须   重新认证。将SlidingExpiration属性设置为false可以   通过限制应用程序的时间来提高应用程序的安全性   根据配置的超时,身份验证cookie有效   值。

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

  1. ... 如果提出请求 ...
  2. ... 超时间隔的一半 ....
  3. 您尚未指定超时,因此将使用默认值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>
    

    无论您在索引视图中停留多长时间,用户仍将进行身份验证。

答案 1 :(得分:0)

cookieless="UseCookies"添加到web.config表单属性。滑动到期现在正在运行。我不明白这有什么不同,但它已经做了一些事情。我想这只是其中一个怪癖。

答案 2 :(得分:0)

我有一个问题,我的滑动过期无效。

我的路径设置不正确。