天天看點

關于二級域名Cookie的問題及解決方法(轉)

今天部落格園全面采用二級域名後,發現即使使用者已經登入,但在通路二級域名Blog頁面時都顯示沒有登入(表現為發表評論時要求輸入驗證碼, 收藏功能無法正常使用),再次登入後,進入其他二級域名還是需要登入。在代碼中,我是通過Request.IsAuthenticated來判斷目前請求是否被驗證的,以前全部采用 www.cnblogs.com域名時很正常,看來是域名不同引起的。對于Form驗證,驗證是通過cookie進行的,在執行Request.IsAuthenticated時,會請求用戶端相應的Cookie, Cookie名是在web.config中指定的,比如部落格園web.config中的設定:

關于二級域名Cookie的問題及解決方法(轉)

< authentication  mode ="Forms" >  

關于二級域名Cookie的問題及解決方法(轉)

    < forms  name =".DottextCookie"  loginUrl ="login.aspx"  protection ="All"  timeout ="480"  path ="/"   />  

關于二級域名Cookie的問題及解決方法(轉)

</ authentication >  

關于二級域名Cookie的問題及解決方法(轉)

也就是說在執行Request.IsAuthenticated時,會執行類似這樣的代碼,HttpCookie cookie = Request.Cookies[".DottextCookie"];我們知道Cookie是與域名關聯的,HttpCookie就有個Domain屬性。部落格園所遇到的問題就是二級域名不能通路主域名的cookie,登入時,部落格園的程式通過FormsAuthentication.SetAuthCookie設定Cookie, 而登入代碼是在www.cnblogs.com域名下執行的,cookie的域名被預設設定為www.cnblogs.com, 而我們在二級域名下就無法通路這個cookie,如何解決這個問題呢?cookie的domain是否可以設定成對所有二級域名有效?在Google中苦苦尋覓,終于找到了一篇文章(Tips On Using SubDomain), 原來可以将cookie關聯的域設定為"

.domain.ext

", 部落格園的設定就是.cnblogs.com。 這樣,我在FormsAuthentication.SetAuthCookie之後,加上這樣的代碼就解決問題了:

關于二級域名Cookie的問題及解決方法(轉)

HttpCookie cookie  =  Request.Cookies[ " .DottextCookie " ];

關于二級域名Cookie的問題及解決方法(轉)

                 if (cookie != null )

關于二級域名Cookie的問題及解決方法(轉)
關于二級域名Cookie的問題及解決方法(轉)
關于二級域名Cookie的問題及解決方法(轉)

{

關于二級域名Cookie的問題及解決方法(轉)

                    cookie.Domain = ".cnblogs.com";

關于二級域名Cookie的問題及解決方法(轉)

                    Response.Cookies.Add(cookie);

關于二級域名Cookie的問題及解決方法(轉)

                }

注:

    1、如果你現在還會遇到通路二級域名要重新登入的情況,請删除你計算機中相應的cookie檔案,路徑在C:/Documents and Settings/使用者名/Cookies與C:/Documents and Settings/使用者名/Local Settings/Temporary Internet Files中,檔案格式為:使用者名@www.cnblogs.com, 然後重新登入。

    2、如果你發現其他與二級域名相關的問題,請及時與我聯系。

    3、如果你在通路部落格園時,出現“Runtime Error”錯誤,那是因為剛剛更新了dll檔案,你再過1、2分鐘重新打開IE通路就行了。

    4、現在已經全面啟用二級域名。

繼續閱讀