C#Authcookie设置在哪里?

时间:2009-06-02 14:39:48

标签: c# asp.net forms-authentication

使用FormsAuthentication时,Authcookie放在哪里?在服务器上还是在客户端上?当客户端禁用cookie时,FormsAuthentication是否仍然有效?

5 个答案:

答案 0 :(得分:4)

在客户端上。据说改变web.config支持cookieless,但我没有成功实现它。如果使用cookieless,则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)

  

在启用AJAX的ASP.NET网站中,对cookieless属性使用默认值UseCookies。 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。

使用cookieless可能不如要求cookie安全。来自Understand How the ASP.NET Cookieless Feature Works

  

Cookieless功能独有的一个大问题(使用Cookie时不存在)是与用户向其他用户发送URL的漏洞(例如,通过电子邮件和IM)。当打开此功能时,例如,FormsAuthentication,并且用户将他(或她)的URL通过电子邮件发送给其他用户,第二个用户将使用第一个用户的凭据自动登录到服务器。一个对策是通过减少表单身份验证的cookie超时来减少发生这种情况的时间窗口(如前面的(b)点所述)。

答案 1 :(得分:2)

它放在客户端上,如果你使用firebug,它应该在响应中看起来像这样:.ASPXFORMSAUTH = C8390F0E68890DF5C731DB2B ....表单身份验证仍然有效,但所有内容都将在浏览器的url中设置。体面的文件here

答案 2 :(得分:0)

Cookie始终存储在客户端。

支持cookie的浏览器解释Set-Cookie HTTP标头(如果启用了cookie),解析此标头的值以获取要存储的cookie的详细信息(名称,值,域,路径和到期日期)并保存某处的cookie值。对于持久性cookie(即设置了到期值的cookie),此位置通常位于文件系统的某个位置,但该位置取决于浏览器。对于会话cookie(只要浏览器打开就没有过期值的cookie),这可能是内存中的数据结构。

答案 3 :(得分:0)

为了更好地理解这一点,我强烈建议使用Http分析器,例如FireFox的HttpFox扩展名。它允许您查看来自身份验证的Cookie是否存在并存储。

答案 4 :(得分: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身份验证。