ASP.NET_Sessionid正在更新

时间:2016-09-20 04:35:43

标签: asp.net session

我的网站中有一个按钮,您必须先登录。单击时,它将从ssrs报告服务器检索报告并将其显示在同一页面上。 我记下了它在请求cookie中使用的会话ID。

Picture of session ID

现在,当我清除缓存并再次运行报告时,会出现以下错误" ASP.NET会话已过期"但是它会获得一个带有会话ID的响应cookie。

现在,当我再次点击按钮时,问题就出现了。该站点能够从ssrs报告服务器检索报告,但它使用响应cookie的会话ID。

Pic of new session ID

任何人都知道为什么会发生这种行为?其他线程没有给我一个彻底的解释。

1 个答案:

答案 0 :(得分:1)

你的描述听起来很正常。

会话ID本质上是指向虚拟内存空间的指针,该虚拟内存空间包含该用户可访问的变量表。该表不会永远保留 - 如果ASP.NET框架在一段时间内没有看到会话ID(比如20或30分钟,具体取决于配置),则会释放内存空间并且回收用于其他用途。如果该会话ID稍后显示,它将不知道如何处理它并且会给你一个"会话已经过期"错误。

您看到的第一个会话ID可能是从上一个会话中遗留下来的。它已经过时了,它的内存空间已经消失,所以ASP.NET会给你错误。

对于没有有效会话的所有请求,将自动发出第二个会话ID。 ASP.NET将自动创建一个内存空间和一个随机密钥,并将其发送回您看到的响应cookie中。现在您的浏览器具有最新的会话cookie,请求将正常工作,您可以看到第二次单击该按钮时。