ASP.NET4中不要相信Request.Browser.Cookies,Form验证要用UseCookies
从ASP.NET 3.5升级至ASP.NET4之后,遇到三种登录后不能保存cookie的情况(升级前一切正常):
1. 遨游3在极速模式下(默认模式)。
2. FireFox中修改了UserAgent。
3. 诺基亚手机自带浏览器或者UCWeb浏览器访问博客园手机版(m.cnblogs.com)。
今天终于把罪魁祸首给揪出来了,它就是Request.Browser.Cookies。
如果你在程序中使用Form验证并使用cookie保存用户的登录状态,请切记:在<authentication mode="Forms">/<forms>中要加上cookieless="UseCookies"。如果不这样设置的话,cookieless会使用默认值UseDeviceProfile。用了UseDeviceProfile,悲剧就发生了,ASP.NET会根据Request.Browser.Cookies来判断当前浏览器是否支持Cookie(如若不信,请用Reflector查看System.Web.Security.FormsAuthentication的代码)。而Request.Browser.Cookies会认为上面的三种情况不支持cookie(可能还有更多误判的情况)。
而在ASP.NET 3.5及ASP.NET 2.0不存在这样的误判。不信的话,大家用下面的代码验证一下:
Response.Write(Request.Browser.Cookies);
用遨游3在极速模式下访问,若是ASP.NET4,则显示False;若是ASP.NET 3.5,则显示True。
本来准备写到这里就结束,但是在写的过程中,觉得不甘心,被这个折腾的差点崩溃,一定要看个究竟,ASP.NET4凭什么认为遨游3不支持cookie。
1)先用下面的代码看一下ASP.NET4把遨游3当成什么浏览器:
相关新闻>>
- 发表评论
-
- 最新评论 进入详细评论页>>
今日头条
更多>>您可能感兴趣的文章
- .Net插件框架的实现及分析(二)
- Asp.net MVC源码分析--UrlRoutingModule与Service location的
- Add View -> Strongly-typed view ->Model Class
- C#高级编程:使用XPath命名空间中的类[2]
- 让asp.net mvc的Action支持jQuery直接提交的javascript对
- ASP.ENT前台更改绑定数据的日期格式
- .NET简谈设计模式之(装饰者模式性能问题?)
- DCOM--高效率主从服务器程序的新概念
- .NET类库中发现设计模式:策略模式
- 使用HttpWebRequest下载经过重定向的文件



