
如果我託管一個 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
文本,但是單擊後會話對象始終是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
一位客戶也遇到了同樣的問題。在這種情況下,刪除並新增應用程式無法解決問題。訣竅是:取代或刪除網址中的底線!