我正在了解HttpContext
,并发现了
将为每个给定的请求重新构造HttpContext对象 到ASP.Net应用程序
现在,考虑一个案例,当我有两页时。 WebForm1和Webform2。在Form1中,我正在编写下面提到的代码并重定向到form2。
HttpContext.Current.Items.Add("Key", "Value");
当我使用Server.Transfer时,此密钥仍然存在,而使用Response.Redirect时不是这种情况
无论何时生成新请求,都会创建HttpCopntext对象。此外,会话保持不变。这是HttpContext的一部分。
HttpContext.Current.Session
如果会话可以持续,为什么HttpContext.Current.Items
中无法Response.Redirect
?
答案 0 :(得分:4)
重定向会生成一个新的HttpContext
,这就是为什么其中的项目会丢失 - 重定向会有效地告诉浏览器下一个要请求的URL,当它发生时,它会丢失触发上一个请求的上一个请求的上下文重定向。
会话在请求之间持续存在(通常使用sessionID cookie将用户绑定到服务器上的值),因此仍然可用。
答案 1 :(得分:0)
我建议您System.Web.dll
HttpContext.Session
查看HttpContext.Items["AspSession"]
,特别是在getter SessionStateModule.InitStateStoreItem(...)
和方法SessionStateUtility.AddHttpSessionStateToContext(...)
中使用的属性SessionStateStoreProviderBase
(称为HttpContext.Items
在那个getter中,我打电话给{{1}}。您可以看到,HttpSessionState集合的内容存储在{{1>}实现的( InProc , Sql )对象中的请求之间,在一个单词中更深入。而{{1}}哈希表首先被初始化并且在请求之间死亡。