2010-01-15 98 views
0

目前我有一個客戶端和管理網頁。有多個用戶將登錄到客戶端頁面。在管理頁面中,當我在管理頁面中恢復數據庫時,我需要註銷當前登錄到客戶端頁面的所有用戶。任何想法應該如何完成?我目前使用的語言是傳統的ASP。如果它可以在ASP.NET中完成,那也可以。謝謝。強制用戶註銷

+0

提到的結算功能你是說,你要通知在頁面的用戶應該註銷並重新登錄,或者是你與他們舒服被迫登錄下一次他們去網站上的一個頁面? – Jacob

回答

0

也許最簡單的方法是定義一個Application變量,指示您的網站處於維護狀態,並且在每個通過服務器端包含的頁面中,檢查該變量並重定向到相應的錯誤頁面。

+0

我很抱歉沒有解釋詳細情況。註銷的原因是在管理員恢復數據庫後獲取最新信息。所以我需要註銷所有用戶並重置所有會話變量,因爲我使用的所有會話都是舊會話。 – lipkee85

2

這實際上取決於您緩存的內容。如果是數據,則可以清除緩存的數據,而不是強制用戶再次登錄。

如果是數據或權限/安全性更改,則可以在數據庫中設置一個名爲SchemaVersion的設置,用於存儲數據庫的當前版本。每個登錄到應用程序的用戶請求都可以將Cookie /會話版本與數據庫中的cookie /會話版本進行比較,如果不同,則會讓客戶端刪除會話/ cookie並強制重新登錄。

據微軟的幫助文章,你可以reset the session這樣的:

Session.Abandon(); 
Response.Cookies.Add(new HttpCookie("ASP.NET_SessionId", "")); 

而且從MSDN可以clear your cookie這樣的:

if (HttpContext.Current.Request.Cookies["MyCookieName"] != null) 
{ 
    HttpCookie aCookie = HttpContext.Current.Request.Cookies["MyCookieName"]; 
    aCookie.Expires = DateTime.Now.AddDays(-10); 
    aCookie.Value = ""; 
    HttpContext.Current.Response.Cookies.Add(aCookie); 
} 

這應該強制登錄,但我沒有證實了這一點。

因此,在總結,你可以使用ASP.NET緩存來存儲數據庫架構版本和:

在頁面加載的開始調用一個輔助類LoginResetHelper.IsDbValid(),看看我們是否需要重新登錄

在輔助類,你會問

if (Cache["SchemaVersion"] == null) 
{ 
    // retrieve schemaVersion from db 

    Cache.Add("SchemaVersion", schemaVersion); 
} 
HttpCookie oCookie = new HttpCookie("ClientSchemaVersion"); 
if (Cache["SchemaVersion"] == oCookie.Value) 
    return true; 
return false; 

如果IsDbValue爲真,則繼續正常

如果它是假的,然後調用LoginResetHelper.ResetLogin()並重定向到登錄頁面。

ResetLogin()應執行我上面

+0

因此對於每個頁面請求,我需要連接到數據庫並檢索cookie/session並進行比較?我更喜歡沒有與數據庫的連接,並強制註銷用戶。 – lipkee85

+0

SchemaVersion值可以存儲在緩存中,因此不必每次都調用數據庫 - 只需要一個允許更新的頁面即可。 這樣,當你改變數據庫,你調用網頁和變量重置。 – Ezz

+0

但上述重置會話方法是否適用於其他用戶使用自己的計算機登錄?據我所知,cookies /會話存儲在他們自己的機器中,所以如果我想清除cookie /會話,我需要獲得多餘的機器並清除它。我對嗎? – lipkee85