二級域名Cookie問題的解決方法
更新時間:2008年10月27日 16:15:53 作者:
今天博客園全面采用二級域名后,發(fā)現(xiàn)即使用戶已經(jīng)登錄,但在訪問二級域名Blog頁面時都顯示沒有登錄(表現(xiàn)為發(fā)表評論時要求輸入驗證碼, 收藏功能無法正常使用),再次登錄后,進入其他二級域名還是需要登錄。
在代碼中,我是通過Request.IsAuthenticated來判斷當前請求是否被驗證的,以前全部采用www.cnblogs.com域名時很正常,看來是域名不同引起的。對于Form驗證,驗證是通過cookie進行的,在執(zhí)行Request.IsAuthenticated時,會請求客戶端相應的Cookie, Cookie名是在web.config中指定的,比如博客園web.config中的設置:
<authentication mode="Forms">
<forms name=".DottextCookie" loginUrl="login.aspx" protection="All" timeout="480" path="/" />
</authentication>
也就是說在執(zhí)行Request.IsAuthenticated時,會執(zhí)行類似這樣的代碼,HttpCookie cookie = Request.Cookies[".DottextCookie"];我們知道Cookie是與域名關(guān)聯(lián)的,HttpCookie就有個Domain屬性。博客園所遇到的問題就是二級域名不能訪問主域名的cookie,登錄時,博客園的程序通過FormsAuthentication.SetAuthCookie設置Cookie, 而登錄代碼是在www.cnblogs.com域名下執(zhí)行的,cookie的域名被默認設置為www.cnblogs.com, 而我們在二級域名下就無法訪問這個cookie,如何解決這個問題呢?cookie的domain是否可以設置成對所有二級域名有效?在Google中苦苦尋覓,終于找到了一篇文章(Tips On Using SubDomain), 原來可以將cookie關(guān)聯(lián)的域設置為".domain.ext", 博客園的設置就是.cnblogs.com。 這樣,我在FormsAuthentication.SetAuthCookie之后,加上這樣的代碼就解決問題了:
C#
HttpCookie cookie = Request.Cookies[".DottextCookie"];
if(cookie!=null)
{
cookie.Domain = ".cnblogs.com";
Response.Cookies.Add(cookie);
}
注:
1、如果你現(xiàn)在還會遇到訪問二級域名要重新登錄的情況,請刪除你計算機中相應的cookie文件,路徑在C:\Documents and Settings\用戶名\Cookies與C:\Documents and Settings\用戶名\Local Settings\Temporary Internet Files中,文件格式為:用戶名@www.cnblogs.com, 然后重新登錄。
2、如果你發(fā)現(xiàn)其他與二級域名相關(guān)的問題,請及時與我聯(lián)系。
3、如果你在訪問博客園時,出現(xiàn)“Runtime Error”錯誤,那是因為剛剛更新了dll文件,你再過1、2分鐘重新打開IE訪問就行了。
4、現(xiàn)在已經(jīng)全面啟用二級域名。
復制代碼 代碼如下:
<authentication mode="Forms">
<forms name=".DottextCookie" loginUrl="login.aspx" protection="All" timeout="480" path="/" />
</authentication>
也就是說在執(zhí)行Request.IsAuthenticated時,會執(zhí)行類似這樣的代碼,HttpCookie cookie = Request.Cookies[".DottextCookie"];我們知道Cookie是與域名關(guān)聯(lián)的,HttpCookie就有個Domain屬性。博客園所遇到的問題就是二級域名不能訪問主域名的cookie,登錄時,博客園的程序通過FormsAuthentication.SetAuthCookie設置Cookie, 而登錄代碼是在www.cnblogs.com域名下執(zhí)行的,cookie的域名被默認設置為www.cnblogs.com, 而我們在二級域名下就無法訪問這個cookie,如何解決這個問題呢?cookie的domain是否可以設置成對所有二級域名有效?在Google中苦苦尋覓,終于找到了一篇文章(Tips On Using SubDomain), 原來可以將cookie關(guān)聯(lián)的域設置為".domain.ext", 博客園的設置就是.cnblogs.com。 這樣,我在FormsAuthentication.SetAuthCookie之后,加上這樣的代碼就解決問題了:
C#
復制代碼 代碼如下:
HttpCookie cookie = Request.Cookies[".DottextCookie"];
if(cookie!=null)
{
cookie.Domain = ".cnblogs.com";
Response.Cookies.Add(cookie);
}
1、如果你現(xiàn)在還會遇到訪問二級域名要重新登錄的情況,請刪除你計算機中相應的cookie文件,路徑在C:\Documents and Settings\用戶名\Cookies與C:\Documents and Settings\用戶名\Local Settings\Temporary Internet Files中,文件格式為:用戶名@www.cnblogs.com, 然后重新登錄。
2、如果你發(fā)現(xiàn)其他與二級域名相關(guān)的問題,請及時與我聯(lián)系。
3、如果你在訪問博客園時,出現(xiàn)“Runtime Error”錯誤,那是因為剛剛更新了dll文件,你再過1、2分鐘重新打開IE訪問就行了。
4、現(xiàn)在已經(jīng)全面啟用二級域名。
相關(guān)文章
ASP.NET?Core?MVC中Form?Tag?Helpers用法介紹
這篇文章介紹了ASP.NET?Core?MVC中Form?Tag?Helpers的用法,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2022-02-02ASP.NET用戶注冊實戰(zhàn)(第11節(jié))
這篇文章主要介紹了ASP.NET用戶注冊實戰(zhàn),鞏固前10小節(jié)所學的全部知識,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2015-08-08ASP.NET實現(xiàn)基于Forms認證的WebService應用實例
這篇文章主要介紹了ASP.NET實現(xiàn)基于Forms認證的WebService應用,實例分析了使用Forms進行WebService身份認證的相關(guān)技巧與實現(xiàn)方法,需要的朋友可以參考下2015-05-05asp.net在后端動態(tài)添加樣式表調(diào)用的方法
這篇文章主要介紹了asp.net在后端動態(tài)添加樣式表調(diào)用的方法,涉及asp.net操作樣式表的相關(guān)技巧,具有一定參考借鑒價值,需要的朋友可以參考下2015-04-04.net core 6.0 通過依賴注入注冊和使用上下文服務的教程
在.NET Core 6.0 中,獲取上下文的方式取決于您使用的技術(shù)棧和具體的應用程序類型,這篇文章主要介紹了.net core 6.0 通過依賴注入注冊和使用上下文服務的教程,需要的朋友可以參考下2023-12-12asp.net下創(chuàng)建、查詢、修改帶名稱空間的 XML 文件的例子
asp.net下創(chuàng)建、查詢、修改帶名稱空間的 XML 文件的例子...2007-04-04MVC+EasyUI+三層新聞網(wǎng)站建立 后臺登錄界面的搭建(二)
這篇文章主要為大家詳細介紹了MVC+EasyUI+三層新聞網(wǎng)站建立的第二篇,教大家如何搭建后臺登錄界面,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-07-07asp.net連接數(shù)據(jù)庫 增加,修改,刪除,查詢代碼
asp.net連接數(shù)據(jù)庫,實現(xiàn)增加,修改,刪除,查詢的四大功能完整代碼。2009-07-07