在什么情况下会话变量会死?

时间:2014-02-05 13:36:44

标签: asp.net asp.net-mvc-4 session-variables

我想使用会话变量在我的mvc 4应用程序中存储一些数据,但我对会话生命周期有点不确定。我有超时设置,很明显它会在用完时消失,但我很好奇发生了什么(以及我如何控制发生的事情):

  • 浏览器关闭
  • 页面已刷新
  • 用户注销(我假设我需要手动处理这个)

1 个答案:

答案 0 :(得分:3)

我认为除了所有评论(我认为都是答案)之外,要考虑的(其他)关键项目是客户端(浏览器),会话是饼干。因此,例如,如果我将浏览器设置为每次关闭时丢弃cookie,那将会“中断”会话。

显然,这不适用于无Cookie会话(其中“标识符”位于网址中)。

另外,请查看持久非持久性 Cookie上的this post(浏览器关闭,即“浏览器会话”将转储会话)。

MSDN documentation

  

ASP.NET必须跟踪每个用户的会话ID,以便它可以将用户映射到服务器上的会话状态信息。 默认情况下,ASP.NET使用非持久性cookie 来存储会话状态。但是,如果用户在浏览器上禁用了cookie,则会话状态信息不能存储在cookie中。

     

ASP.NET以cookieless会话的形式提供了另一种选择。您可以将应用程序配置为存储不在cookie中的会话ID,而是存储在站点中页面的URL中。如果您的应用程序依赖于会话状态,您可以考虑将其配置为使用无cookie会话。但是,在某些有限的情况下,如果用户与其他人共享URL - 可能是在用户的会话仍处于活动状态时将URL发送给同事 - 那么两个用户最终都可以共享同一个会话 ,结果不可预测。

也就是说,根据您希望持续 x时间的数据类型,您还可以查看客户端存储选项(例如web/dom/local storage等)与基于服务器/ cookie的存储相关联,甚至可能替代它们。请注意,这不会对客户端/用户操作“免疫”(用户可以根据需要随时转储所有数据),也不会产生任何安全性影响。