【问题标题】:ASP.NET non-persistent cookie (aka session cookie) not time out for some usersASP.NET 非持久性 cookie(又名会话 cookie)不会对某些用户超时
【发布时间】:2014-04-18 02:36:49
【问题描述】:

我有一个使用非持久性 cookie(又名会话 cookie)的 ASP.NET MVC Web 项目。要求是登录会话将在 30 分钟不活动或用户关闭网络浏览器后超时。

项目正在生产中,部分用户反映使用几天后不需要登录。但他们必须在开始使用项目时登录。到目前为止,该缺陷无法在测试服务器上复制。同样,该缺陷不会发生在每个用户身上,而是发生在某些用户一些使用之后。

以下是主要代码:

1) 使用cookie.Expires = DateTime.MinValue; //创建非持久cookie。

2) 使用FormsAuthentication.Encrpt()方法加密票

3) 在 web.config timeout 属性中使用表单元素来验证超时

上面的代码解释了主要逻辑。

有什么想法吗?

【问题讨论】:

    标签: c# asp.net asp.net-mvc


    【解决方案1】:

    实际上,设置cookie.Expires 总是在日期是将来时创建持久cookie,或者如果日期是过去时删除cookie。

    线

    cookie.Expires = DateTime.MinValue;
    

    那么有点令人困惑。看起来您正在删除 cookie,因此当它到达客户端时,它应该被浏览器无效。那你提供的信息就不一致了。

    要拥有非持久性 cookie,切勿触摸 Expires 属性。相反,在FormsAuthenticationTicket 中设置有效日期。然后 cookie 将访问服务器,但里面的票证将使其无效。令牌有效期和 cookie 到期日期是两个不相关的日期,您应该依赖第一个日期。

    我的猜测是,对于某些用户来说,第一页可能是从浏览器缓存中读取的。 Firefox 积极缓存,我们观察到了这种行为。解决此问题的一种可能方法是在页面级别关闭缓存,以便告知浏览器始终向服务器询问页面的最新版本,因此用户必须重新登录。

    【讨论】:

    • 如果我没记错的话,使用 DateTime.MinValue 是 ASP.NET 中会话 cookie 的默认方式。缺陷不会发生在每个人身上。即使发生这种情况,也是在一些用法之后。
    • 确定不是缓存问题?
    • 您好,感谢您的帮助。生产中有缓存。但是为什么缓存会导致这个问题呢?您是指缓存 cookie 还是用于表单身份验证票?
    • 票据无法缓存,cookies被缓存。我不知道你有什么缓存系统以及它缓存了什么,但我认为它可能是罪魁祸首。
    猜你喜欢
    • 2016-04-24
    • 2013-03-06
    • 2012-08-17
    • 2016-08-10
    • 1970-01-01
    • 1970-01-01
    • 2012-03-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多