ASP.NET:在资源管理器中重定向时,会话状态未更新

时间:2009-02-09 14:13:31

标签: c# asp.net

我有一个aspx页面(page1.aspx),我在其中设置了一个Session变量,然后重定向到另一个页面:

HttpContext.Current.Response.Redirect("page2.aspx");

在page2.aspx上我想读取会话变量,但在重新加载页面之前它不存在。我尝试在page_load中读取会话变量。

奇怪的是它可以在firefox中运行,但不适用于资源管理器吗?

(请注意,我已经简单地解释了一下这个问题。我从HttpModule访问了page1.aspx并重写了(我的解决方法是访问Session)。所以流程是HttpModule -pathrewrite-> page1 .aspx(set session var)-redirect-> page.2.aspx。)

2 个答案:

答案 0 :(得分:3)

尝试将响应重定向切换为:

Response.Redirect("page2.aspx",false);
HttpContext.Current.ApplicationInstance.CompleteRequest();

名义上的Redirect(url)隐式调用引发Redirect("url", true)的{​​{1}}。在ASP.NET内部完成时,引发的ThreadAbortException是一个特殊的异常。可以捕获的此异常无法静音。它将继续冒泡ASP.NET调用链,使当前工作线程立即终止。

突然终止可能会影响到这一点。

答案 1 :(得分:1)

仅供参考:

添加ApplicationInstance.CompleteRequest();并没有真正解决我的问题(我的错误)。

找到一个描述问题的博客条目,其解决方案可以解决问题。

http://forums.asp.net/p/1163911/1931020.aspx#1931020

我在第2页中添加了(在PageLoad上):

Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.ExpiresAbsolute = DateTime.Now.AddMonths(-1);