關於二級域名Cookie的問題及解決方法

關於二級域名Cookie的問題及解決方法

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

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

也就是說在執行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之後,加上這樣的代碼就解決問題了:

HttpCookie cookie = Request.Cookies[".DottextCookie"];
                
if(cookie!=null)
                
{
                    cookie.Domain 
= ".cnblogs.com";
                    
Response.Cookies.Add(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、現在已經全面啓用二級域名。 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章