當前位置: 首頁IT技術 → ASP中Cookie跨域操作遇到的問題及其處理方案

ASP中Cookie跨域操作遇到的問題及其處理方案

更多

下面跟大家一起分享學習的是關于Cookie跨域操作遇到的問題及解決方法 ,希望能夠幫助到大家。

Cookie跨域操作看來是個簡單的問題,因為只要指定Domain屬性為指定網(wǎng)站的根域名就可以了.但是筆者在實際使用過程中卻遇到了一些問題,的確值得注意.

  環(huán)境介紹

  cookie在www主域名下創(chuàng)建,并寫入Domain屬性,如:(為方便調(diào)試以下代碼皆為asp代碼)

  Write.asp

<%
Response.Cookies(CookieName)("UserName") = "SunBird"
Response.Cookies(CookieName)("Password") = "xyz1234"
Response.Cookies(CookieName).Domain = "xxxx.com"
%>

  上面文件放在www主域名下,同時在同目錄下放置一個讀取cookie的Read.asp

  Read.asp

<%
Response.Write Request.Cookies(CookieName)("UserName")
Response.Write Request.Cookies(CookieName)("Password")
%>

  再放一個Read.asp文件到另外一個子域名站點里,代碼同上。最后我們再做一個清除cookie的Clear.asp放在主域名下

  Clear.asp

<%
Response.Cookies(CookieName)("UserName") = ""
Response.Cookies(CookieName)("Password") = ""
Response.Cookies(CookieName).Domain = "xxxx.com"
%>

  現(xiàn)在可以通過下面的執(zhí)行順序來測試,Write.asp-->主域名的Read.asp-->子域名的Read.asp 所有Read.asp頁面都可以讀取到Write.asp創(chuàng)建的cookie的值,然后再運行Clear.asp進行清除,一切都Ok,看上去沒有什么問題。

  但是把這種方法運用到實際的站點時卻出現(xiàn)問題了。

  問題描述:

  第一次登錄一切ok,所有子域名都可以訪問到主域名存儲的cookie,但是,一旦退出之后,子域名的cookie被清除了,但是主域名的cookie仍然保留著,強行清除主域名的cookie之后,無論怎樣登錄主域名下都無法保存cookie了,除非關掉瀏覽器重新打開。

  經(jīng)過多次嘗試之后,無意中發(fā)現(xiàn)問題所在,以下是測試經(jīng)過。

  創(chuàng)建一個Write2.asp的頁面放在主域名下

<%
Response.Cookies(CookieName)("TEST_COOKIE") = "TEST_COOKIE"
%>

  第一步:關閉瀏覽器后,按以下順序執(zhí)行,Write.asp-->主域名的Read.asp-->子域名的Read.asp 到這里所有Read.asp讀取正常。

  第二步:Clear.asp-->主域名的Read.asp-->子域名的Read.asp 到這里清除操作是成功的。

  第三步:Write.asp--> Write2.asp --> 主域名Read.asp --> 子域名Read.asp 到這里兩個Read.asp都可以讀取到cookie的值。

  第四步:重新執(zhí)行第二步,發(fā)現(xiàn)主域名Read.asp仍然輸出了值,而子域名下的Read.asp的值已經(jīng)被清空了。

  根據(jù)以上測試總結以下幾點再跨域使用cookie時需要注意的地方

  1、當你有一個Cookie組(或叫Cookie字典)使用Domain屬性指定域名之后,當你在對該組的成員進行修改或新增的時候,一定要在操作之后加上Resonse.Cookies(CookieName).Domain屬性。

  2、如果沒有必要,請不要修改已設置Domain的Cookie組,直接使用Response.Cookies("CookieText") = CookieValue 來創(chuàng)建一個新的Cookie。

熱門評論
最新評論
發(fā)表評論 查看所有評論(0)
昵稱:
表情: 高興 可 汗 我不要 害羞 好 下下下 送花 屎 親親
字數(shù): 0/500 (您的評論需要經(jīng)過審核才能顯示)