2009-06-02 36 views
1

使用FormsAuthentication時,Authcookie的位置在哪裏?在服務器上還是在客戶端上?當客戶端禁用Cookie時,FormsAuthentication是否仍然有效?C#Authcookie集合在哪裏?

回答

1

它被放置在客戶端上,如果你使用螢火蟲它應該看起來像這樣在響應:.ASPXFORMSAUTH = C8390F0E68890DF5C731DB2B ....表單身份驗證仍然可以工作,但一切都將設置在瀏覽器的網址。體面的文檔here

+0

在螢火蟲的哪裏可以看到迴應? – Martijn 2009-06-03 07:18:52

+0

當您展開Net部分中的項目時,應該會看到標題選項卡和響應選項卡。 – Rob 2009-06-03 14:27:34

0

Cookie始終存儲在客戶端。

支持cookie的瀏覽器會解釋Set-Cookie HTTP標頭(如果啓用了cookie),請解析此標頭的值以獲取要存儲的cookie的詳細信息(名稱,值,域,路徑和到期日期)並將cookie值保存到某處。對於永久性Cookie(即設置了到期值的那些),此位置通常位於文件系統的某處,但位置與瀏覽器有關。對於會話cookie(只要瀏覽器處於打開狀態,沒有過期值的cookie),這可能是內存數據結構。

4

在客戶端上。據推測,無cookie是通過更改web.config來支持的,但我沒有成功實施它。如果使用無Cookie,Cookie將存儲在網頁的URI中,例如http://MySite.com/MyWebApplication/F(XXXX))/home.aspx

<forms 
    cookieless="[UseUri|UseCookie|AutoDetect|UseDeviceProfile]" 
</forms> 

forms Element for authentication (ASP.NET Settings Schema)

在支持ASP.NET AJAX的Web站點,使用默認值UseCookies對Cookie的屬性。 ASP.NET AJAX客戶端腳本庫不支持使用在URL中編碼的Cookie的設置。

UseCookies指定始終使用Cookie,而不管設備如何。

UseUri指定不會使用cookie。

AutoDetect指定如果設備配置文件支持cookie,則使用cookie;否則,Cookie不會被使用。對於已知支持Cookie的桌面瀏覽器,啓用時將使用探測機制嘗試使用Cookie。如果設備不支持cookie,則不會使用探測機制。

UseDeviceProfile指定如果瀏覽器支持cookie,則使用cookie;否則,Cookie不會被使用。對於支持Cookie的設備,不會嘗試進行探測以確定是否啓用Cookie支持。

此屬性在.NET Framework 2.0版中是新增的。

默認值是UseDeviceProfile。

使用無cookie可能不如使用cookie安全。從Understand How the ASP.NET Cookieless Feature Works

的一個大問題是唯一的cookie的功能(使用cookie時不存在),是鏈接到用戶發送URL給其他用戶的漏洞(通過電子郵件和IM,例如)。當此功能打開(例如FormsAuthentication),並且用戶通過電子郵件將他(或她)的URL發送給其他用戶時,第二個用戶將自動使用第一個用戶的憑據登錄到服務器。一種對策是通過減少表單身份驗證的cookie超時來減少這種情況發生的時間窗口(如前面(b)所述)。

0

爲了更好地理解這一點,我強烈推薦使用Http分析器,比如用於FireFox的HttpFox擴展。它允許您查看來自身份驗證的cookie是否存在並存儲。

0

在服務器上。使用Reflector來挖掘FormsAuthentication類,並且可以追蹤cookie的初始化和設置位置。

Reflector是一個免費的工具,可以「反編譯」.NET程序集,使您可以或多或少地看到他們在做什麼(儘管它不顯示原始源代碼,只是基於IL的重建版本)。

利用這一點,你可以打開該文件

c:\Windows\Microsoft.NET\Framework\<version>\System.Web.dll 

並查看System.Web.Security命名空間中的類FormsAuthentication。在那裏,你可以看到,cookie將被創建,並在私人重載方法

GetAuthCookie(string userName, bool createPersistentCookie, string strCookiePath, bool hexEncodedTicket) 

這是由RedirectFromLoginPage叫(或公版GetAuthCookie)的設置。

研究此文件,您還可以看到.NET如何處理無Cookie驗證。