IIS 7.0 不保留会话变量

IIS 7.0 不保留会话变量

如果我托管一个 ASP.NET 页面:

<%@ Page Language="C#" %>

<!DOCTYPE html>    
<script runat="server">

    protected void btn_Click(object sender, EventArgs e)
    {
        lbl.Text = HttpContext.Current.Session["a"] == null ? 
                       "null" : 
                       HttpContext.Current.Session["a"].ToString();
    }

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {
            HttpContext.Current.Session["a"] = "A";
            lbl.Text = "assigned Session Variable";
        }
    }
</script>

<html>
<head>
    <title>Testing Sessions</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:Button ID="btn" runat="server" Text="reload" OnClick="btn_Click" />
        <hr />
        <asp:Label ID="lbl" runat="server" />
    </div>
    </form>
</body>
</html>

第一次运行时我确实得到了assigned Session Variable文本,但单击时 Session 对象始终null

是否有一个选项需要我打开/关闭才能使用正常的会话变量?

在 IIS 6.0 和 Cassini (VS 2008 和 2010 下) 上运行良好。

我开始不知道发生了什么事了 :o(

任何帮助是极大的赞赏!


上述示例页面的流程

替代文本

替代文本


更多测试表明这种情况只发生在 IE(本例中为 ie8)、Firefox、Safari、Opera、Chrome 中,它们都给出了正确的“答案”

替代文本


检查情况截图

答案1

您必须在 par200864 中更改您的 url par_2008_64,因为在资源管理器中下划线不起作用并且会话变为空

答案2

传统会话状态要求为相关站点启用 cookie。您是否有可能将 Internet Explorer 设置为阻止来自服务器的 cookie,而其他浏览器没有这样设置?这可以解释行为上的差异。您应该能够使用 Fiddler(参见http://www.fiddler2.com/fiddler2/) 来观察 IE 和服务器之间的 HTTP 流量,看看 IE 是否将 cookie 发送回服务器。我强烈怀疑答案是“否”。

您可以设置无 cookie 会话(例如http://msdn.microsoft.com/en-us/library/ms972429.aspx) 在您的 web.config 文件中也确认这一点;如果 cookieless 有效,那么就可以了。

答案3

如果有人发现这个“错误”,请做一件简单的事情来解决它。

  • 删除虚拟应用程序
  • 创建一个新的虚拟应用程序(可以与之前同名)

答案4

在客户那里也遇到了同样的问题。在这种情况下,删除和添加应用程序无法解决问题。诀窍是:替换或删除 url 中的下划线!

相关内容