Iis-7
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
文本,但是在點擊時,會話對象總是null
我是否需要打開/關閉一個選項才能使用正常的會話變數?
在 IIS 6.0 和 Cassini 上執行良好(在 VS 2008 和 2010 下)。
我開始對發生的事情一無所知:o(
任何幫助是極大的讚賞!
上面範例頁面的流程
更多測試表明,這只發生在 IE(本例中為 ie8)、Firefox、Safari、Opera、Chrome 他們都給出了正確的“答案”
檢查情況的螢幕截圖
您必須在 par200864 中更改您的網址 par_2008_64,因為在資源管理器中,下劃線不起作用並且會話變為空
傳統會話狀態需要為相關站點啟用 cookie。您是否有可能將 Internet Explorer 設置為阻止來自伺服器的 cookie,而其他瀏覽器沒有設置為這種方式?這可以解釋行為上的差異。您應該能夠使用 Fiddler(參見http://www.fiddler2.com/fiddler2/)來觀察 IE 和伺服器之間的 HTTP 流量,並查看 IE 是否正在將 cookie 發送回伺服器。我強烈懷疑答案是否定的。
您也可以在 web.config 文件中設置無 cookie 會話(例如http://msdn.microsoft.com/en-us/library/ms972429.aspx)來確認這一點;如果 cookieless 有效,那麼就可以了。