【问题标题】:ASP.Net Session data lost between pagesASP.Net 会话数据在页面之间丢失
【发布时间】:2023-03-24 12:37:02
【问题描述】:

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

我能够在 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();

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

【问题讨论】:

  • 欢迎来到 SO,请花几分钟时间阅读常见问题解答和 Markdown 文档(编辑问题时右侧空白处提供了有用的概要)。
  • 到底发生了什么以及如何在客户端 (firefox) 上查看服务器端会话变量?你到底在用什么,你检查过 web.config 以确保会话超时不为 0?

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


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    您是在网络农场/网络花园环境中开发吗?

    【讨论】:

    • 不是我不在网络农场/网络花园环境中开发
    【解决方案3】:

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

    【讨论】:

    • 我可以尝试状态服务器模式,但由于这段代码(使用 InProc 模式)已经存在很长时间并且还存在于其他 3 个环境中,所以我无法更改它。但是,我不知道为什么现在会出现这个问题
    • 那么 cookie 呢?用 fiddler 观看它和/或观看会话 id 的变化。
    【解决方案4】:

    我的问题如下:-

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

    会话值在 Google Chrome 和 Firefox 中移动到下一页,但在 Internet Explorer 中没有。

    解决方案:我们创建了带有“_”(下划线)的 URL 名称,例如http://MySite_test.com。删除“_”后,它可以根据需要工作,例如http://MySitetest.com

    其他可能的解决方案:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-04-04
      • 1970-01-01
      • 2012-06-15
      • 1970-01-01
      • 2012-10-25
      • 1970-01-01
      • 1970-01-01
      • 2023-03-30
      相关资源
      最近更新 更多