某些用户的ASP.NET非持久性cookie(也称为会话cookie)没有超时

时间:2014-04-17 18:08:18

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

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

该项目正在投入生产,一些用户报告说他们在使用几天后不需要登录。但他们必须在使用项目开始时登录。到目前为止,无法在测试服务器上复制该缺陷。同样,每个用户都会发生的缺陷,而某些用户会在某些用户之后发生。

以下是主要代码:

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

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

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

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

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

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

该行

cookie.Expires = DateTime.MinValue;

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

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

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