2011-07-18 58 views
1

是否可以實現僅在瀏覽器的相同實例中可用的身份驗證。我的意思是,當用戶從同一個瀏覽器的另一個實例進入時,他將能夠從另一個帳戶登錄。這兩個賬戶將同時登錄?是否可以在瀏覽器範圍的實例上實現身份驗證?

+0

你是指瀏覽器窗口或不同瀏覽器的實例嗎? –

+0

同一瀏覽器的不同實例 –

+0

@ OneHalfTrackMindMan:謝謝,我編輯了它 –

回答

1

表單身份驗證允許這樣做。考慮到您必須打開另一個瀏覽器窗口而不是選項卡,因爲通常在瀏覽器窗口中的標籤之間共享身份驗證Cookie。

如果您在登錄頁面上使用Login控件將DisplayRememberMe屬性值設置爲false。並使用以下代碼從登錄頁面重定向:FormsAuthentication.RedirectFromLoginPage(LoginControl.UserName, false);在這種情況下,身份驗證Cookie將存儲在瀏覽器的進程中,並且不會在瀏覽器的多個實例之間共享。

我會嘗試解釋窗體身份驗證如何工作,如果您仍然有興趣得到答案。 每次您打開受保護的頁面系統檢查身份驗證Cookie時。如果不存在,則系統返回未經授權的響應並將用戶重定向到登錄頁面。當用戶輸入登錄名和密碼時,Forms Authorization嘗試使用提供的憑證對用戶進行身份驗證。如果憑證有效,系統將生成身份驗證Cookie並將其發送到客戶端的瀏覽器。然後這個cookie用於未來的請求。 有兩種方法可以將cookie存儲在客戶端: 第一種方式 - cookie在客戶端的硬盤驅動器上存留。在這種情況下,每次用戶打開本網站的頁面時,這個特定的Cookie都會使用。這個cookie對於每個瀏覽器實例都是一樣的,所以確實無法用不同的憑證打開不同的瀏覽器實例。 但第二種選擇是,身份驗證cookie不會保留在客戶端的硬盤上,而是存儲在瀏覽器的進程中。在這種情況下,您可以爲不同的用戶打開很多瀏覽器窗口。 正如我上面提到的,ASP.NET中的這兩種情況可以通過爲FormsAuthentication.SetAuthCookie或FormsAuthentication.RedirectFromLoginPage方法提供適當的第二個參數來實現:對於客戶端硬盤上的持久cookie以及瀏覽器進程中的存儲cookie爲false。

順便說一下,即使使用Windows身份驗證,也可以使用不同憑據打開網站頁面。要達到此目的,您必須以「運行方式...」命令啓動瀏覽器並提供不同的Windows憑據。

+0

那是怎麼回事?當我登錄一個實例並打開另一個實例時,第二個實例將被登錄。當我從其中一個登出時,另一個將被註銷。 –

+0

在IE中使用Gmail進行試用,您會發現它會將身份驗證cookie與實例共享。我也嘗試過,結果相同(即使在我嘗試過時(文件 - 新建會話),也會共享身份驗證Cookie(IE 8,9)) –

+0

Gmail將Cookie存儲爲持久性cookie。如果關閉計算機並啓動備份,您仍然登錄。 – mjr

0

要做到這一點的唯一方法就是在查詢字符串中保留會話ID。這是非常醜陋的,但可能(iirc)與表單身份驗證。除非有很好的具體原因需要這個,否則我建議不要這樣

相關問題