簡體   English   中英

ASP.NET sessionID不會更新

[英]ASP.NET sessionID will not update

我點擊刷新按鈕,它應該重啟會話:

protected void btnRefresh_Click(object sender, EventArgs e)
{

    HttpContext.Current.Session.Abandon();
    HttpCookie mycookie = new HttpCookie("ASP.NET_SessionId");
    mycookie.Expires = DateTime.Now.AddDays(-1);
    Response.Cookies.Add(mycookie);
    LblSessionID.Text = HttpContext.Current.Session.SessionID+
        " test btnRefresh_Click";
    LblIsNewSession.Text = Session.IsNewSession.ToString();
}

但是當單擊該按鈕時, LblSessionID的SessionID值仍顯示舊值,但另一個標簽LblIsNewSession將為LblIsNewSession顯示為true。 然后,當我使用具有autopostback="true" asp.net控件(如下拉列表)時, LblSessionID將反映實際的SessionID值,並且會從那里繼續使用SessionID。

我確實使用global.asax

知道為什么LblSessionID沒有表現應該正在等待下一個回發開始反映實際值嗎?

當我啟動Web應用程序時,問題是相同的 - LblSessionID顯示不同的值,然后在第一次回發后更改並從那里保持不變。

這是它的工作方式 - 如果您Abandon會話,它將不會反映到下一個請求。 如果你考慮它就有意義了......

假設您有一個用戶訪問您的站點並獲得會話ID為123 (不知道實際值,我知道)。 當您單擊按鈕以獲取新的會話ID時,用戶的請求來自舊會話,這是在該Request期間反映的值。 一旦會話被重置(或放棄或等等),用戶將獲得321的新會話ID,然后后續Request將反映該新會話ID。

除非您在會話中實際存儲某些內容(任何內容),否則SessionId不可靠。

嘗試

   Session.RemoveAll();

    Session.Clear(); 

它不是你的代碼,它是一個記錄的行為: “Abandon方法在會話狀態對象中設置一個標志,指示應該放棄會話狀態。在頁面請求結束時檢查標志。因此,用戶在調用Abandon方法后仍然可以使用會話對象。一旦頁面處理完成,會話就會被刪除。“ (來源: http//support.microsoft.com/kb/899918

Abandon()方法標記會話集合以在請求結束時清除,它實際上不會立即清除它。

您可以調用RemoveAll()或Clear()方法來立即刪除對象,也可以對頁面本身發出Response.Redirect調用,並重新測試數據是否存在。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM