簡體   English   中英

當Session.Abandon()不起作用時,如何以編程方式結束asp.net中的會話?

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

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