2011-09-08 55 views
1

我有幾個網站使用HTTPModule(包裝在DLL中)來認證用戶並將認證對象存儲在應用程序緩存中約10小時。然後我在用戶機器上設置一個包含緩存鍵的cookie。ASP.Net應用程序上下文數據共享

我現在正在尋找一種方法來允許管理員清除任何給定用戶的所有網站的特定緩存對象(實際登出),導致他們下次訪問時自動重新登錄(通過Windows身份驗證)任何網站。

我打算建立一個單一管理網站,提供重設登錄的功能 - 但由於明顯的安全原因,我無法更改其他網站的應用程序緩存。

有沒有任何方式將信號傳遞給那些使用認證模塊的站點,以便他們可以清除自己的應用程序緩存?

注意:我已經閱讀了memcached,但我想避免一個不是'標準ASP.NET'的解決方案,如果可能的話。

回答

1

這裏有兩個想法:

  • 如果他們是在同一臺服務器上,你可以有包含在文件系統中活動的登錄文件,所有的項目都可以訪問。
  • 爲每個項目添加一個通用處理程序,重置給定用戶的登錄名。當他從那裏註銷時,從另一個項目調用它。出於安全原因,您可以添加密碼。

編輯:我只是想一個更好的解決方案:

  • 創建一箇中心「認證」項目跟蹤的登錄狀態。從網站調用它(例如通過通用處理程序,webservice ...)以註銷用戶或檢查其狀態。
+0

我傾向於通用處理程序的一種形式,通過分析HttpApplication.BeginRequest中的請求並運行緩存清除代碼(如果url符合某些條件)。它確實意味着維護每個網站的URL的中央列表,以便儘可能地調用它。 –

+0

的確如此,但是您將需要使用各種解決方案的列表,您希望在這些網站之間進行直接交流。我只是想到另一個,可能更好的方法,但將編輯到我的答案。 – magnattic

+0

我已經有一箇中央站點來管理它,但是它將已驗證用戶的權限傳遞迴請求項目,以便它們可以被緩存。如果我將這些數據緩存在中央項目中,它將會破壞目標,因爲消費項目將不斷需要查詢中央身份驗證站點以獲取用戶權限。我想在一個「Cache22」的情況下,哈哈。 –

0

我選擇將代碼載入現有的HTTPModule。

我檢查自定義的用戶代理字符串,如果存在我清除相關的緩存條目基於查詢字符串,併成功返回自定義HTTP標頭。

唯一的額外開銷是檢查每個請求,我可以住的用戶代理。

通過此設置,我現在可以使用我的中心站點的WebRequest對象(注入我的自定義用戶代理字符串)將消息發送到使用該模塊的所有站點。

相關問題