会话长度是在通话开始时还是在通话结束时延长?

时间:2013-02-22 12:58:03

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

只是出于好奇,如果我的会话超时为20分钟,则会发生以下情况:

  1. 用户访问网站。初始会话超时开始。
  2. 在同一页面上一分钟后调用$.post("/api/longrunningfuction", function() { alert("success"); })
  3. 回复前需要十分钟(希望不切合实际,只是为了帮助我解决问题)。
  4. 剩下的时间现在是:

    1. 20分钟,因为电话回复并延长了会话时间?
    2. 10分钟(电话会议延长了会议时间,但该帖子返回的时间为10分钟。)
    3. 其他?

2 个答案:

答案 0 :(得分:1)

会话扩展的工作原理是将表单身份验证cookie重写为响应。更具体地说,如果您为表单身份验证启用了滑动过期(通常不建议出于安全原因),则在向服务器发送请求时,表单身份验证模块会在请求的开始处拦截此请求,它解密表单身份验证cookie,以便提取表单身份验证票证并修改此票证的到期日期,并将新cookie添加到响应中。所有这些都发生在请求的开头。这意味着会话将从那一刻起延长20分钟(或者无论你的超时定义)。

然后让我们假设在将响应返回给客户端(以及分别刷新的表单身份验证cookie)之前,整个请求需要10分钟才能完成。当客户收到此cookie时,还剩10分钟才能生效。

答案 1 :(得分:1)

会话结束事件的documentation表示(强调我的)

  

会话在Timeout指定的分钟数到期时到期   财产在没有要求为会话的情况下通过。

因此应该还有10分钟。

我还没有看到框架代码,但会话持续时间是通过在响应时设置身份验证cookie持续时间来控制的。因此,即使在服务器端代码已完成时发送新cookie,似乎也是合乎逻辑的,当请求接收时,将计算新的到期时间。如果在计算到期时间和将其传送回客户端之间经过10分钟,则会丢失10分钟的会话。