2009-10-21 101 views
3

我有一個在IIS7上運行的ASP.NET MVC應用程序。我使用會話來跟蹤登錄的用戶。有一個名爲IsSignedIn的會話。 (「true」表示此用戶當前登錄)。強制登錄的用戶通過使其會話無效重新登錄

我也有我的應用程序管理頁面。

現在,說已登錄的用戶1必須立即暫停使用該服務。因此,我想使我的管理頁面中爲user1設置的會話變量無效(這將強制用戶再次登錄)。

有沒有一種方法可以從我的管理頁面訪問/修改每個登錄用戶設置的會話變量?

回答

6

您不能從另一個會話更改會話變量。

解決您的問題的一種方法是將已登錄用戶的列表存儲在Application對象中,然後更改該變量中的值。爲此,您必須在每個頁面的頂部檢查此用戶位於登錄用戶列表中。

由於çağdaş對此答案發表了評論,如果您將要註銷的用戶列表存儲在您的應用程序變量中,性能可能會更好。然後在你的頁面的頂部做這樣的事情(假,這在實際工作的代碼片段將無法正常工作)

if(Application["SuspendedUsers"].Contains(Session["UserID"]) { 
    Session["IsSignedIn"] = false; 
    Application["SuspendedUsers"].Remove(Session["UserID"]); 
} 
+0

或者存儲一個暫停用戶列表,該列表可能會比登錄用戶小。 – 2009-10-21 18:40:39

+0

問題在於它意味着*任何未明確排除的人都會被認證。我的表弟鮑勃可能不需要訪問您的網站。 – 2009-10-21 18:43:52

+0

+1。應用程序對象應該正常工作。緩存對象也將工作,並允許更多的靈活性。 – 2009-10-21 18:47:31

0

在哪裏存儲您的會話狀態?如果它在SQL服務器中,則應該可以通過更新數據庫中的相關行來使其無效。但是,標準會話狀態服務器似乎不允許這樣做。

或者,檢查每個相關頁面頂部的數據庫以查看用戶是否仍有權限/已通過身份驗證。