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文本,但是單擊後會話對象始終是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

一位客戶也遇到了同樣的問題。在這種情況下,刪除並新增應用程式無法解決問題。訣竅是:取代或刪除網址中的底線!

相關內容