如果我托管一个 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 中的下划线!