Seb*_*son 134 asp.net session sessionid
为什么ASP.NET页面中Session -object 上的属性SessionID在请求之间发生变化?
我有一个这样的页面:
...
<div>
SessionID: <%= SessionID %>
</div>
...
Run Code Online (Sandbox Code Playgroud)
每次我点击F5时输出都会不断变化,与浏览器无关.
Cla*_*edi 209
这就是原因
使用基于cookie的会话状态时,在使用Session对象之前,ASP.NET不会为会话数据分配存储空间.结果,为每个页面请求生成新的会话ID,直到访问会话对象.如果您的应用程序需要整个会话的静态会话ID,您可以在应用程序的Global.asax文件中实现Session_Start方法,并将数据存储在Session对象中以修复会话ID,或者您可以在您的另一部分使用代码应用程序在Session对象中显式存储数据.
http://msdn.microsoft.com/en-us/library/system.web.sessionstate.httpsessionstate.sessionid.aspx
基本上,除非您在后端访问会话对象,否则将为每个请求生成一个新的sessionId
编辑
必须在Global.asax文件中添加此代码.它会向Session对象添加一个条目,以便您修复会话直到它到期为止.
protected void Session_Start(Object sender, EventArgs e)
{
Session["init"] = 0;
}
Run Code Online (Sandbox Code Playgroud)
Nev*_*ook 88
还有另一个更阴险的原因,即使在Cladudio演示的Session对象初始化时,为什么会出现这种情况.
在Web.config中,如果有一个<httpCookies>条目设置为requireSSL="true"但您实际上并未使用HTTPS:对于特定请求,则会话cookie不会发送(或者可能不会返回,我不确定哪个)这意味着什么您最终会为每个请求提供一个全新的会话.
我发现这个很难,在源代码控制中的几次提交之间花了几个小时来回,直到我发现哪些特定的更改破坏了我的应用程序.
在我的情况下,我发现会话cookie有一个包含前缀的域www.,而我正在请求没有的页面www..
添加www.到URL立即修复了问题.后来我将cookie的域名改为设置为.mysite.com而不是www.mysite.com.
我的问题是我们在 web.config 中设置了这个
<httpCookies httpOnlyCookies="true" requireSSL="true" />
这意味着在非 SSL(默认)中调试时,auth cookie 不会被发送回服务器。这意味着服务器会为每个请求向客户端发送一个新的 auth cookie(带有新会话)。
修复方法是在 web.config 中将 requiressl 设置为 false 并在 web.release.config 中设置为 true 或在调试时打开 SSL:
| 归档时间: |
|
| 查看次数: |
95237 次 |
| 最近记录: |