[英]How do you programmatically end a session in asp.net when Session.Abandon() doesn't work?
Session.Abandon()似乎沒有做任何事情。 在調用Session.Abandon()時,您可能希望觸發Session_end事件。
這很可能是因為您的SessionMode
不是 InProc
(唯一可以檢測會話何時結束的內容)。
引自MSDN :
會話事件
ASP.NET提供了兩個可幫助您管理用戶會話的事件。 新會話啟動時會引發Session_OnStart事件,並且會話被放棄或過期時會引發Session_OnEnd事件。 會話事件在ASP.NET應用程序的Global.asax文件中指定。
如果會話模式屬性設置為InProc以外的值(默認模式),則不支持Session_OnEnd事件。
Session.Abandon()是結束會話的方式。 你遇到的問題是什么?
如果它的Back按鈕相關,那是一個完全不同的問題(頁面不在Backback上回發,而是從clientside緩存運行一個,因此不會執行服務器端方法)。
此外,Session_End存在問題。 它只會在使用InProc會話時觸發Session.Abandon(),因此如果您使用的是其他會話模式,則無法依賴它。 否則,Session_End將在達到SessionTimeout時觸發(默認為20分鍾,我相信,在Web.Config中配置)。
你嘗試過使用以下產品嗎?
System.Web.Security.FormsAuthentication.SignOut();
這將清除用於表單身份驗證的cookie,盡管可能不是您正在尋找的。
你可能需要在Session.Abandon()的附加中使用它
如果會話似乎持續存在,您可以嘗試(在web.config中):
<sessionState regenerateExpiredSessionId="true">
這取決於,如果您的應用程序位於2個服務器上:1 WebApplication具有自己的會話,第二個WS或WCF應用程序也有自己的會話,它在我曾經工作過的應用程序中的狀態。 如果你遇到這種情況,那么會話必須在第二點結束,第一點結束時會出現超時。 至少你必須使用一個令牌並保留活動會話的令牌列表。 可能是你的情況。 祝好運。 PS。 要終止會話,請在第二台服務器中管理它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.