A 用戶登錄 → 退出 → B 用戶登錄 → 頁面跳轉時會話數據在 A/B 之間切換顯示。
ASP.NET_SessionId) 中。若 Cookie 未正確清除/更新,新用戶復用舊 Session ID → 讀取到殘留數據。Session.Abandon() 僅標記當前會話棄用,但 不會立即刪除 StateServer 中的數據,且不會刪除客戶端 Cookie。
public void Logout() {
// 1. 清除服務端 Session 數據
Session.Clear(); // 清除鍵值
Session.Abandon(); // 標記棄用,觸發 Session_End
// 2. 刪除客戶端 Session Cookie
HttpCookie sessionCookie = new HttpCookie("ASP.NET_SessionId", "");
sessionCookie.Expires = DateTime.Now.AddYears(-1);
sessionCookie.Path = "/"; // 必須與設置時一致
Response.Cookies.Add(sessionCookie);
// 3. 重定向登錄頁(防止回退)
Response.Redirect("~/Login.aspx");
}
protected void btnLogin_Click(object sender, EventArgs e) {
// 驗證用戶...
if (valid) {
// 強制新 Session
Session.Abandon(); // 棄用舊
// 可選:Response.Cookies["ASP.NET_SessionId"].Expires = DateTime.Now.AddDays(-1);
Session["LOGIN_USER"] = userInfo;
Response.Redirect("~/Main.aspx");
}
}
services.msc → ASP.NET State Service)。machineKey 配置一致(Web 園/場景景下必須顯式配置 validationKey、decryptionKey)。StateServer 內存存儲無法直接查看。可臨時改為 mode="SQLServer" 並配置 sqlConnectionString,則會話存入 ASPStateTempSessions 表,可直接查詢。
Session.Abandon() + 刪除 ASP.NET_SessionId Cookie。Session.Abandon() 確保新會話。web.config 中 (HTTPS 環境)與 設置。Session 亂串本質是 Session ID 復用導致數據隔離失效,徹底清除 Cookie 並強制新會話是核心解法。