ASP.Net会话数据在页面之间丢失

时间:2010-03-23 20:32:12

标签: c# .net iis session session-variables

我今天在网络应用程序中遇到了一种奇怪的行为。当我从一个页面导航到另一个页面时,我丢失了一个特定的会话变量数据。

我可以在firefox中启动应用程序,并且能够看到会话数据没有丢失。

我使用Response.Redirect(page2, false)重定向到另一个页面。

下面的代码用于跟踪会话变量

System.IO.StreamWriter sw = new System.IO.StreamWriter(@"c:\test.txt", true);
for (int i = 0; i < Session.Count; i++)
{
 sw.WriteLine(Session.Keys[i] + " " + Session.Contents[i]);
}
sw.Close();

任何人都可以帮助我吗?任何帮助表示赞赏。

4 个答案:

答案 0 :(得分:3)

我遇到了完全相同的问题,在我的情况下,我发现了这种行为的原因。事实证明,当我调用Response.Redirect()方法时,我使用的是完整的URL而不仅仅是页面名称。因此,当我在localhost / myapp / page1.aspx时,我重定向到MYMACHINENAME / myapp / page2.aspx,这就是每个页面的会话不同的原因。我在我的代码中仅使用“page2.aspx”更正了这一点,然后任何浏览器(IE,firefox)上的最终网址都是localhost / myapp / page2.aspx。不知道你是否正在按照我的方式玩网址正在这样做,但也许这个答案可以给你一个线索。谢谢和良好的编码

答案 1 :(得分:0)

您是在Web场/ Web园环境中开发的吗?

答案 2 :(得分:0)

尝试使用state server mode。根据应用程序池的配置和部署方式,默认的进程内模式可能无法预测。

答案 3 :(得分:0)

我的问题如下: -

问题:当我们将ASP.NET应用程序移动到使用IIS 7.5的另一台服务器(Windows Server 2008 R2)时,应用程序无法在页面之间移动会话值。例如会话值已在第一页中设置,但无法移至下一页。在下一页中,同一会话变量的值为NULL。

在谷歌浏览器和Firefox的情况下会话值正在转移到下一页,但在Internet Explorer中却没有。

解决方案:我们使用“_”(下划线)创建了网址名称,例如http://MySite_test.com。删除“_”后,它可以按要求工作,例如http://MySitetest.com

其他可能的解决方案:

  1. 使用Response.Redirect并将第二个参数设置为“false”以避免执行页面,从而避免丢失会话令牌。您必须按如下方式使用URL。 Response.Redirect(“NextPage.aspx”,false)

  2. 如果站点的应用程序池配置为Web场或Web园(通过将最大工作进程数设置为多个),并且您没有使用会话服务或SQL会话,传入的请求将无法预测地转到其中一个工作进程,如果它不是创建会话的那个进程,则会丢失。如果您不需要提高性能,或者使用其中一个进程外会话提供程序,则此问题的解决方案是不使用Web园。