使用FormsAuthentication时,Authcookie放在哪里?在服务器上还是在客户端上?当客户端禁用cookie时,FormsAuthentication是否仍然有效?
答案 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身份验证。