2013-01-09 20 views

回答

-1

形式與餅乾(不管他們是否是持久與否)認證是基於瀏覽器會話(永久cookie會跨越同一個瀏覽器的多個會話課程作業(在同一臺機器上使用的用戶帳戶)。於是兩個瀏覽器會話的(或兩臺不同的瀏覽器或兩臺機器上的瀏覽器等)將被視爲與遠程表單身份驗證有關的不同範圍

因此,用戶可以從不同的瀏覽器會話進行多次登錄,並且註銷一個不會影響其他人。到網絡應用程序是否允許同一用戶進行多個併發登錄,例如,網上銀行網站將限制爲只有一個用戶會話 - 所以如果用戶從不同的會話登錄,則以前的會話無效(即用戶爲 登出)。必須在ASP.NET中編寫自定義實現才能這樣做 - 典型實現會使每個用戶會話都進入數據庫(無論如何通常都需要用於審計目的) - 所以無論何時添加新條目,都會檢查是否存在任何活動會話爲同一用戶,如果是,那麼該會話被標記爲不活動。每個請求都會檢查當前用戶會話是否處於活動狀態,如果不是,則會將此類消息標記給用戶。

0

我通常這樣說:我在user表中有一個會話列(數據庫)當我的用戶日誌存儲值Ÿ在它。我當他註銷其更改爲ñ用戶試圖登錄。每次,我在相應的會話列檢查值,如果它是Ÿ我告訴他已經登錄的用戶,如果它是ň然後我允許用戶登錄但我們必須小心並在用戶註銷或關閉瀏覽器時將值設置爲N

+3

「但是我們必須小心並在用戶註銷或關閉瀏覽器時將值設置爲N.」對於註銷,我可以想象邏輯,但是當用戶關閉瀏覽器時,如何將值更新爲N ..? – Praditha

2

我有SRINIVAS同意大部分。這裏是我對這個問題的看法

  1. 在登錄創建一個HTTP只有在登錄時生成一個GUID的cookie這將是您的瀏覽器/計算機密鑰。關閉瀏覽器將刪除的cookie
  2. 獲得用戶ID
  3. 堅持的對用戶的表例如:用戶:一,關鍵:12345
  4. 在後面的請求後,用戶已經通過認證
  5. 獲取最後使用的認證算法與當前用戶ID的DB關鍵
  6. 檢查cookie的存在,如果沒有則完全unauthenticate
  7. 檢查cookie的值是一樣的,在數據​​庫中,如果沒有則完全unauthenticate

利用這種方法的任何後續的登錄將導致需要重新認證&無效的任何其它認證。實際上迫使用戶只使用1個瀏覽器/計算機

相關問題