使用FormsAuthentication時,Authcookie的位置在哪裏?在服務器上還是在客戶端上?當客戶端禁用Cookie時,FormsAuthentication是否仍然有效?C#Authcookie集合在哪裏?
回答
它被放置在客戶端上,如果你使用螢火蟲它應該看起來像這樣在響應:.ASPXFORMSAUTH = C8390F0E68890DF5C731DB2B ....表單身份驗證仍然可以工作,但一切都將設置在瀏覽器的網址。體面的文檔here
Cookie始終存儲在客戶端。
支持cookie的瀏覽器會解釋Set-Cookie
HTTP標頭(如果啓用了cookie),請解析此標頭的值以獲取要存儲的cookie的詳細信息(名稱,值,域,路徑和到期日期)並將cookie值保存到某處。對於永久性Cookie(即設置了到期值的那些),此位置通常位於文件系統的某處,但位置與瀏覽器有關。對於會話cookie(只要瀏覽器處於打開狀態,沒有過期值的cookie),這可能是內存數據結構。
在客戶端上。據推測,無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)所述)。
爲了更好地理解這一點,我強烈推薦使用Http分析器,比如用於FireFox的HttpFox擴展。它允許您查看來自身份驗證的cookie是否存在並存儲。
在服務器上。使用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驗證。
- 1. scala集合中的subsetOf在哪裏?
- 2. 應該在哪裏使用System.Collections.Concurrent集合?
- 3. 哪裏定義_counter在Rails 3集合
- 4. 重複在哪裏()vs多個集合在c#
- 5. 在哪裏放置一個集合(緩存?) - c#
- 6. C語言標準集合它們在哪裏?
- 7. NHibernate的從哪裏列(集合)
- 8. C庫在哪裏?
- 9. 我的$ PATH集在哪裏?
- 10. Firebase適合在哪裏?
- 11. Boot.scala適合在哪裏?
- 12. DI在哪裏適合CQS?
- 13. 在哪裏組合條件
- 14. CouchDB在哪裏結合
- 15. C++集合集合
- 16. C#在哪裏,並選擇
- 17. Objective-C - 泄漏在哪裏?
- 18. MVC C#選擇在哪裏
- 19. Mongo C# - FindOne在哪裏?
- 20. Apache Commons for C在哪裏?
- 21. 所有的深奧集合模板庫在哪裏?
- 22. Laravel 5集合問題:在哪裏不等於
- 23. 如何告訴solr我的文檔集合在哪裏?
- 24. 我在哪裏把代碼引導到backbone.js集合?
- 25. 我在哪裏可以獲得javax.persistence屬性的完整集合
- 26. Codeignitor數據庫查詢,或在哪裏和哪裏組合
- 27. Silverlight綁定集合裏面的集合
- 28. XAML:綁定集合裏面的集合
- 29. SQL更新在哪裏在數據集
- 30. PDO聯合在哪裏和在
在螢火蟲的哪裏可以看到迴應? – Martijn 2009-06-03 07:18:52
當您展開Net部分中的項目時,應該會看到標題選項卡和響應選項卡。 – Rob 2009-06-03 14:27:34