Iis-7

IIS 7.0 不保留會話變數

  • March 5, 2014

如果我託管一個 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 有效,那麼就可以了。

引用自:https://serverfault.com/questions/178733