Asp.net

Asp.net:實現自動註銷功能

  • April 24, 2020

我必須在我的一個項目中實現自動註銷功能,我只是不知道從哪裡開始尋找想法,但是SO

如果使用者會話已過期,我需要應用程序將使用者重定向到登錄頁面。請告訴我我應該採取什麼方法來解決這個要求。

問題陳述: 如果使用者在任何給定的登錄實例中離開系統超過 n 分鐘,系統應自動將其註銷。

這是通過以下方式實現的:

1)將每個請求(伺服器和ajax,不包括會話檢查ajax請求)的時間戳保存到伺服器到會話變數中。

  1. 使用 ajax 頻繁地通過 JS 函式輪詢伺服器,檢查會話時間戳和 ajax 請求時間之間的時間差異是否大於會話超時 val 然後註銷目前使用者並返回 bool for那個ajax請求。

  2. 如果返回的布爾值為真,則將目前頁面重定向到登錄頁面。

繼續評論和問題一樣多,我不確定您是否想要在一段時間後將使用者註銷,而不管活動如何,或者只是在一段時間不活動之後。

如果您樂於使用標準的ASP.NET 機制,則無需任何主要工作即可為您完成:

設置您的會員提供商

確保您的身份驗證部分定義了 loginUrl:

<authentication mode="Forms">
 <forms loginUrl="login.aspx" />
</authentication>

您可以使用表單元素上的“超時”屬性設置預設 30 分鐘以外的超時:

<authentication mode="Forms">
 <forms loginUrl="login.aspx" timeout="15"/>
</authentication>

這將在使用者在您的站點上閒置 15 分鐘後註銷(在瀏覽器打開且沒有 javascript“心跳”的情況下,或者如果他們在另一個站點上花費 15 分鐘)。

拒絕匿名使用者訪問

<authorization>
 <deny users="?" />
</authorization>

然後確保使用location 元素的所有使用者都可以訪問您的登錄、註冊和可能忘記的密碼頁面:

<location path="Logon.aspx">
 <system.web>
   <authorization>
     <allow users="?"/>
   </authorization>
 </system.web>
</location>
<location path="Register.aspx">
 <system.web>
   <authorization>
     <allow users="?"/>
   </authorization>
 </system.web>
</location>
<!-- etc -->

這樣,當使用者的身份驗證 cookie 過期時,他們將被重定向到表單頁面的 loginUrl 元素中指定的 URL。


如果您沒有使用標準的 ASP.NET 機制,那麼您最好實現“基頁”類型模型。

創建一個繼承自 System.Web.UI.Page 的新類,它將檢查使用者的登錄狀態,如果他們沒有登錄/超時,則將它們重定向到您的登錄頁面。

在要鎖定的頁面中,您可以從基頁麵類繼承而不是從 System.Web.UI.Page 繼承(這種設置的範例以執行類似的操作 - 檢查每個頁面上的設置)在我的回答中看到


您的登錄頁面可能需要在其中包含一些破壞框架的 JS 才能跳出 iFrame:

if (top!=self.parent){
 top.location=self.parent.location;
}

或者您是說按“返回”他們仍然可以通過瀏覽器記憶體看到您的頁面?在這種情況下,您需要在每個頁面上使用 Cache 標頭:

Response.Cache.SetCacheability(HttpCacheability.NoCache);

好的,那麼,在這種情況下,您還需要一個 JS 計時器對象來執行 Location.Replace 到您的登錄頁面 - 在每個頁面的使用者控制項中(或者更好的是,在您的母版頁面中)都有這個以自動重定向n分鐘後的使用者:

<script type="text/javascript">
 setTimeout('location.Replace("/login.aspx")', 900000);
</script>

時間以毫秒為單位,因此這將在 15 分鐘內移動它們,而無需為此準備整個 jQuery 框架。

您可能還想查看元刷新標籤:

<meta http-equiv="refresh" content="900;url=http://example.com/login.aspx" />

這將強制瀏覽器在 15 分鐘後刷新到登錄頁面(以秒為單位)。

引用自:https://stackoverflow.com/questions/709182