登出的本質是終結用戶的會話狀態。在 ASP.NET Web Forms 中,通過清空 Session 集合並調用 Abandon() 方法,即可徹底銷毀當前會話,隨後重定向至登入頁面完成閉環。
在 index.aspx 放置登出鏈接,指向處理程序:
<a href="logoutHandler.ashx">登出</a>
建立 LogoutHandler.ashx,實現 IHttpHandler 與 IRequiresSessionState 接口(後者為讀寫 Session 的關鍵):
public class LogoutHandler : IHttpHandler, IRequiresSessionState
{
public void ProcessRequest(HttpContext context)
{
context.Session.Clear(); // 移除所有鍵值
context.Session.Abandon(); // 取消當前會話
context.Response.Redirect("/account/login.aspx"); // 跳轉登入頁
}
public bool IsReusable => false;
}
點擊登出鏈接後,Session 即被銷毀,用戶無法再訪問受保護資源,達到安全登出目的。
IRequiresSessionState,否則 context.Session 為 null。Session_End 事件不會觸發,但 Clear() 與 Abandon() 依然有效。