Response.redirect不保留HttpContext.Current.Items

时间:2013-05-22 17:01:25

标签: c# asp.net webforms

我正在了解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

2 个答案:

答案 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}}哈希表首先被初始化并且在请求之间死亡。