天天躁日日躁狠狠躁AV麻豆-天天躁人人躁人人躁狂躁-天天澡夜夜澡人人澡-天天影视香色欲综合网-国产成人女人在线视频观看-国产成人女人视频在线观看

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當成什么瀏覽器:

  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:/Windows/Microsoft.NET/Framework/v4.0.30319/Config/Browsers

  打開這個文件夾一看:

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

2  呵呵,原來真相躲在這里。稍微分析一下這個文件,就能知道:

  遨游3匹配的是第一項(也就是<browser id="Safari" parentID="Mozilla">部分),這項配置中沒有設置cookies=true。

  而正宗的Safari不僅匹配了第一項,還匹配了第二項,(也就是<browser id="Safari3to4" parentID="Safari">部分)這里設置了<capability name="cookies"  value="true" />。

  果然是遨游3“冒充”別人家的瀏覽器造成的,微軟沒想到會出現這樣的的UserAgent。

  找到真相,問題就容易解決了。開始以為只要在第一項中加<capability name="cookies" value="true" />就行了,但沒這么簡單:

  1. safari.browser文件修改不能保存,提示說是只讀文件。解決方法是:將safari.browser復制到其他地方,改好后,再復制回來,覆蓋現有文件。

  2. 要以管理員身份運行下面的命令將這些.browser文件編譯成程序集并安裝到GAC中:

  C:/Windows/Microsoft.NET/Framework/v4.0.30319/ASPNET_regbrowsers.exe –i

3  搞定!終于真相大白,不枉一場折騰。

  如果不寫這篇隨筆,可能加上cookieless="UseCookies"就完事,不會有接下來的深入研究。

  當你有一個收獲,通過博客寫出來之后,不僅加深了這個收獲,很多時候你還會有意外的收獲...

NET技術ASP.NET4中不要相信Request.Browser.Cookies,Form驗證要用UseCookies,轉載需保留來源!

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

主站蜘蛛池模板: 国产精品无码AV天天爽人妻蜜桃 | 無码一区中文字幕少妇熟女H | 视频一区国产精戏刘婷30 | 亚洲免费黄色 | 中文字幕偷乱免费视频在线 | 国产精品久久久久永久免费看 | 与邻居换娶妻子2在线观看 瑜伽牲交AV | 麻豆国产99在线中文 | 老师湿乎乎两半嫩 | 伊人电院网 | 蜜桃久久久亚洲精品成人 | 免费乱理伦片在线观看夜 | 成人性生交片无码免费看 | 在线亚洲中文字幕36页 | 久久极品视频 | 97无码人妻精品1国产精东影业 | 大胸美女脱内衣黄网站 | 花蝴蝶免费版高清版 | chinesetoilet美女沟| www在线小视频免费 www伊人网 | 扒开粉嫩的小缝末成年小美女 | 成人小视频免费在线观看 | 国产成人刺激视频在线观看 | 摸老师丝袜小内内摸出水 | 午夜福利网国产A | 99 久久99久久精品免观看 | 日韩精品一区VR观看 | 国产亚洲精品久久孕妇呦呦你懂 | 亚洲精品国偷拍自产在线观看蜜臀 | 国产精品久久久久久免费字体 | 日韩欧美视频一区二区在线观看 | 九九久久精品国产 | 国产精品无码亚洲精品 | 国产精品久久久久精品A片软件 | 2021久久精品免费观看 | 国模大胆一区二区三区 | FREE17一18外女破 | 国产精品久久久久久人妻精品蜜桃 | 国产专区亚洲欧美另类在线 | 亚洲综合色婷婷在线影院 | 琪琪的色原网站 |