首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >ASP.NET:请求之间的Session.SessionID更改

ASP.NET:请求之间的Session.SessionID更改
EN

Stack Overflow用户
提问于 2010-05-20 21:22:16
回答 14查看 118.9K关注 0票数 147

为什么ASP.NET页面中Session-object上的SessionID属性在不同的请求之间会发生变化?

我有一个这样的页面:

代码语言:javascript
复制
...
<div>
    SessionID: <%= SessionID %>
</div>
...

而且每次我点击F5的时候,输出都会不断变化,与浏览器无关。

EN

回答 14

Stack Overflow用户

回答已采纳

发布于 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对象中添加一个条目,这样您就可以修复该会话,直到它过期。

代码语言:javascript
复制
protected void Session_Start(Object sender, EventArgs e) 
{
    Session["init"] = 0;
}
票数 238
EN

Stack Overflow用户

发布于 2011-08-19 22:31:38

还有另一个更隐蔽的原因,即使在Cladudio所演示的Session对象已经初始化的情况下,也可能发生这种情况。

在Web.config中,如果有一个<httpCookies>条目被设置为requireSSL="true",但是您实际上并没有使用HTTPS:对于一个特定的请求,那么会话cookie将不会被发送(或者可能不会返回,我不确定是哪一个),这意味着对于每个请求,您都会得到一个全新的会话。

我发现这是一个艰难的过程,在我的源代码控制中的几次提交之间花费了几个小时,直到我发现是什么特定的更改破坏了我的应用程序。

票数 98
EN

Stack Overflow用户

发布于 2013-03-14 23:18:42

在我的例子中,我发现会话cookie有一个包含www.前缀的,而我请求的页面没有www.

www.添加到URL立即修复了该问题。后来,我将cookie的域从www.mysite.com改为.mysite.com

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2874078

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档