为什么ASP.NET页面中Session-object上的SessionID属性在不同的请求之间会发生变化?
我有一个这样的页面:
...
<div>
SessionID: <%= SessionID %>
</div>
...
而且每次我点击F5的时候,输出都会不断变化,与浏览器无关。
发布于 2010-05-20 21:32:51
这就是原因
使用基于cookie的会话状态时,在使用会话对象之前,ASP.NET不会为会话数据分配存储。因此,会为每个页面请求生成一个新的会话ID,直到访问会话对象为止。如果应用程序需要整个会话的静态会话ID,则可以在应用程序的Global.asax文件中实现Session_Start方法并将数据存储在session对象中以修复会话ID,也可以使用应用程序的其他部分中的代码显式地将数据存储在session对象中。
http://msdn.microsoft.com/en-us/library/system.web.sessionstate.httpsessionstate.sessionid.aspx
因此,基本上,除非您在后端访问session对象,否则每个请求都会生成一个新的sessionId
编辑
此代码必须添加到文件Global.asax中。它会向Session对象中添加一个条目,这样您就可以修复该会话,直到它过期。
protected void Session_Start(Object sender, EventArgs e)
{
Session["init"] = 0;
}
发布于 2011-08-19 22:31:38
还有另一个更隐蔽的原因,即使在Cladudio所演示的Session对象已经初始化的情况下,也可能发生这种情况。
在Web.config中,如果有一个<httpCookies>
条目被设置为requireSSL="true"
,但是您实际上并没有使用HTTPS:对于一个特定的请求,那么会话cookie将不会被发送(或者可能不会返回,我不确定是哪一个),这意味着对于每个请求,您都会得到一个全新的会话。
我发现这是一个艰难的过程,在我的源代码控制中的几次提交之间花费了几个小时,直到我发现是什么特定的更改破坏了我的应用程序。
发布于 2013-03-14 23:18:42
在我的例子中,我发现会话cookie有一个包含www.
前缀的域,而我请求的页面没有www.
。
将www.
添加到URL立即修复了该问题。后来,我将cookie的域从www.mysite.com
改为.mysite.com
。
https://stackoverflow.com/questions/2874078
复制相似问题