[英]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.