当前位置:  编程技术>.net/c#/asp.net

asp.net4中Form验证要用UseCookies

    来源: 互联网  发布时间:2014-08-30

    本文导语:  从ASP.NET 3.5升级至ASP.NET4之后,遇到三种登录后不能保存cookie的情况(升级前一切正常): 1. 遨游3在极速模式下(默认模式)。 2. FireFox中修改了UserAgent。 3. 诺基亚手机自带浏览器或者UCWeb浏览器访问博客园手机版(m.cnblogs.co...

从ASP.NET 3.5升级至ASP.NET4之后,遇到三种登录后不能保存cookie的情况(升级前一切正常):
1. 遨游3在极速模式下(默认模式)。
2. FireFox中修改了UserAgent。
3. 诺基亚手机自带浏览器或者UCWeb浏览器访问博客园手机版(m.cnblogs.com)。

今天终于把罪魁祸首给揪出来了,它就是Request.Browser.Cookies。

如果你在程序中使用Form验证并使用cookie保存用户的登录状态,请切记:在/中要加上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当成什么浏览器:
Response.Write(Request.Browser.Browser);
答案是:Safari
难道微软在这里搞了小花招,只要是Safari,故意认为它不支持cookie。
用正宗的Safari测试了一下,Request.Browser.Cookies返回True。冤枉微软了,微软也不会这么小家子气。

2) 再用Request.UserAgent看一下遨游3的UserAgent:
结果是:Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN) AppleWebKit/533.9 (KHTML, like Gecko) Maxthon/3.0 Safari/533.9
双核浏览器是果然不同反响。难道是复杂的UserAgent让ASP.NET4很恼火:谁家的浏览器这么复杂,干脆判定你不支持cookie。

3) 接下来是关键的一步,找出ASP.NET4根据什么判断当前浏览器是否支持cookie?可以确定的是,不是抛硬币抛出来的。
用Reflector看源代码,看得头昏脑胀,也没找到答案。算了,那就用杀手锏——猜测法。嘿嘿,这招竟然管用。
原来ASP.NET4是根据下面的文件夹中的数据进行判断的:
C:WindowsMicrosoft.NETFrameworkv4.0.30319ConfigBrowsers
打开这个文件夹一看:

眼前一亮,迫不及待地打开safari.browser:

呵呵,原来真相躲在这里。稍微分析一下这个文件,就能知道:
遨游3匹配的是第一项(也就是部分),这项配置中没有设置cookies=true。
而正宗的Safari不仅匹配了第一项,还匹配了第二项,(也就是部分)这里设置了。
果然是遨游3“冒充”别人家的浏览器造成的,微软没想到会出现这样的的UserAgent。
找到真相,问题就容易解决了。开始以为只要在第一项中加就行了,但没这么简单:
1. safari.browser文件修改不能保存,提示说是只读文件。解决方法是:将safari.browser复制到其他地方,改好后,再复制回来,覆盖现有文件。
2. 要以管理员身份运行下面的命令将这些.browser文件编译成程序集并安装到GAC中:
C:WindowsMicrosoft.NETFrameworkv4.0.30319aspnet_regbrowsers.exe –i

搞定!终于真相大白,不枉一场折腾。

如果不写这篇随笔,可能加上cookieless="UseCookies"就完事,不会有接下来的深入研究。

原文链接:http://www.cnblogs.com/dudu/archive/2011/03/06/asp_net_4_browser_cookie.html


    
 
 

您可能感兴趣的文章:

  • asp.net ajax时用alert弹出对话框与验证控件冲突的解决方法
  • asp.net验证邮箱格式的两种方法
  • asp.net创建位图生成验证图片类(验证码类)
  • asp.net使用ODP即oracle连接方式的的防注入登录验证程序
  • asp.net 验证码实现代码一例
  • asp email邮箱地址验证正则表达式
  • asp.net生成图片验证码的例子
  • asp.net 简单验证码的实现方法
  • ASP.NET 验证码与刷新验证码的例子
  • asp.net 验证身份证号码的代码一例
  • asp.net验证码代码(C#)
  • 如何解决 asp.net 点击验证码不刷新的问题
  • asp.net随机验证码生成示例
  • asp.net验证码图片生成示例
  • asp.net 验证码的示例代码(入门参考)
  • asp.net 常用正则表达式与验证类
  • asp.net数字、字符相混合的验证码示例
  • asp.net mvc3异常处理和身份验证
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • ASP.NET之 Ajax相关知识介绍及组件图
  • 我想了解一些关于Java怎样与Asp或Asp.net结合方面在未来发展方向的问题?
  • c#/ASP.NET操作cookie(读写)代码示例
  • CSS属性参考手册 iis7站长之家
  • asp.net实例 定义和使用asp:AccessDataSource
  • win2008 r2 服务器环境配置(FTP/ASP/ASP.Net/PHP)
  • asp与asp.net的session共享
  • 如何在unix下发布asp?
  • 怎么让Apache支持Asp?
  • ??谁能把ASP代码改为JSP的
  • Linux平台下哪种方法实现ASP好?
  • ASP和ASP.Net共享Session解决办法
  • 通过socket和asp打交道
  • 犹豫中……,到底是选择ASP,还是JSP?
  • asp 是否 可用applet标签?帮忙!!
  • asp.net判断数据库表是否存在 asp.net修改表名的方法
  • 新人提问:asp+access的程序在linux下怎么改?
  • 用JAVA APPLET做的交互式网页和ASP、PHP做的相比有什么优势呢?
  • asp.net文字水印功能简单代码
  • asp里面可否使用java写的邮件,给30分.
  • asp与Jsp可否在iis中共存的问题


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3