|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
如果需要重新编写代码,几乎任何一门计算机语言都可以跨平台了,还用得着net网页编程嘛,而且像PHP/C#等语言不需要修改代码都可以跨Windows/Linux。从ASP.NET3.5晋级至ASP.NET4以后,碰到三种登录后不克不及保留cookie的情形(晋级前统统一般):
1.游览3在极速形式下(默许形式)。
2.FireFox中修正了UserAgent。
3.诺基亚手机自带扫瞄器大概UCWeb扫瞄器会见博客园手机版(m.cnblogs.com)。
明天终究把祸首罪魁给揪出来了,它就是Request.Browser.Cookies。
假如你在程序中利用Form考证并利用cookie保留用户的登录形态,请牢记:在<authenticationmode="Forms">/<forms>中要加上cookieless="UseCookies"。假如不如许设置的话,cookieless会利用默许值UseDeviceProfile。用了UseDeviceProfile,喜剧就产生了,ASP.NET会依据Request.Browser.Cookies来判别以后扫瞄器是不是撑持Cookie(如若不信,请用Reflector检察System.Web.Security.FormsAuthentication的代码)。而Request.Browser.Cookies会以为下面的三种情形不撑持cookie(大概另有更多误判的情形)。
而在ASP.NET3.5及ASP.NET2.0不存在如许的误判。不信的话,人人用上面的代码考证一下:
Response.Write(Request.Browser.Cookies);
用游览3在极速形式下会见,如果ASP.NET4,则显现False;如果ASP.NET3.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;WindowsNT5.1;zh-CN)AppleWebKit/533.9(KHTML,likeGecko)Maxthon/3.0Safari/533.9
双核扫瞄器是公然分歧反应。岂非是庞大的UserAgent让ASP.NET4很末路火:谁家的扫瞄器这么庞大,爽性判断你不撑持cookie。
3)接上去是关头的一步,找出ASP.NET4依据甚么判别以后扫瞄器是不是撑持cookie?能够断定的是,不是抛硬币抛出来的。
用Reflector看源代码,看得头昏眼花,也没找到谜底。算了,那就用杀手锏——推测法。嘿嘿,这招居然管用。
本来ASP.NET4是依据上面的文件夹中的数据举行判别的:
C:WindowsMicrosoft.NETFrameworkv4.0.30319ConfigBrowsers
翻开这个文件夹一看:
长远一亮,刻不容缓地翻开safari.browser:
呵呵,本来原形躲在这里。略微剖析一下这个文件,就可以晓得:
游览3婚配的是第一项(也就是<browserid="Safari"parentID="Mozilla">部分),这项设置中没有设置cookies=true。
而正宗的Safari不但婚配了第一项,还婚配了第二项,(也就是<browserid="Safari3to4"parentID="Safari">部分)这里设置了<capabilityname="cookies"value="true"/>。
公然是游览3“假充”他人家的扫瞄器酿成的,微软没想到会呈现如许的的UserAgent。
找到原形,成绩就简单办理了。入手下手觉得只需在第一项中加<capabilityname="cookies"value="true"/>就好了,但没这么复杂:
1.safari.browser文件修正不克不及保留,提醒说是只读文件。办理办法是:将safari.browser复制到其他中央,改好后,再复制返来,掩盖现有文件。
2.要以办理员身份运转上面的命令将这些.browser文件编译成程序集并安装到GAC中:
C:WindowsMicrosoft.NETFrameworkv4.0.30319aspnet_regbrowsers.exe–i
弄定!终究水落石出,不枉一场折腾。
假如不写这篇漫笔,大概加上cookieless="UseCookies"就完事,不会有接上去的深切研讨。
当你有一个劳绩,经由过程博客写出来以后,不但加深了这个劳绩,良多时分你还会成心外的劳绩...
我有个同学,他是搞net网页编程的,他给我说“net网页编程不是效率低,而是速度慢。”,我不是搞net网页编程的,我实在想不透这句话的含义,难道执行速度不就是效率低吗?难道执行速度慢还成效率高了? |
|