二級域名共享cookies

 

步驟:
1、在iis新建站點3個
www.goalercn.com(和goalercn.com),img.goalercn.com,blog.goalercn.com
2、在www.goalercn.com下建立文件testcookies.asp,代碼如下:

<%
Response.Cookies("Type") = "Test Cookies"
Response.Cookies("Type").Expires = date()+30
Response.Cookies("Type").Domain = ".goalercn.com"
Response.Cookies("Type").Secure = False
Response.Write Request.Cookies("Type")
%>


3、在ad.goalercn.com下建立文件testcookies.asp,代碼如下:

<%Response.Write Request.Cookies("Type")%>


4、在blog.goalercn.com下建立文件testcookies.asp,代碼同上
5、因爲是本機測試,修改hosts文件,把4個域名都指向到127.0.0.1,也就是添加如下內容:
    127.0.0.1     ad.goalercn.com
    127.0.0.1     blog.goalercn.com
    127.0.0.1     www.goalercn.com
    127.0.0.1     goalercn.com
6、關閉所有瀏覽器,開ie,打開http://www.goalercn.com/demo/testcookies.asp,顯示出文本內容:Test Cookies
7、新建窗口,打開http://ad.goalercn.com/temp/testcookies.asp,顯示出文本內容:Test Cookies
8、新建窗口,打開http://blog.goalercn.com/temp/testcookies.asp,同樣顯示出如上文本內容
9、換其他4個瀏覽器,都成功。

注意點:
1、Response.Cookies("Type").Secure = False,Secure屬性一定要是false,或者直接不執行這行,如果Secure = True,則ad和blog的2級域名是取值不了。
2、Response.Cookies("Type").Domain = ".goalercn.com",domain的值,我設置爲"goalercn.com",也就是沒有前面的點,在IE下成功
其他4個瀏覽器沒測試。
3、path我猜是不應該設置的。
4、在局域網內其他機器上,修改host指向到我機器的IP,取值成功。
5、在局域網另外一臺機器上架設ad.goalercn.com,把testcookies.asp文件copy過去,同時修改host到當前機器,取值成功
 

 

 

Cookie跨域操作解決方案Cookie跨域操作

看來是個簡單的問題,因爲只要指定Domain屬性爲指定網站的根域名就可以了.

但是筆者在實際使用過程中卻遇到了一些問題,的確值得注意.

環境介紹

cookie在www主域名下創建,並寫入Domain屬性,如:(爲方便調試以下代碼皆爲asp代碼)

Code:

Write.asp

<%
Response.Cookies(CookieName)("UserName") = "SunBird"
Response.Cookies(CookieName)("Password") = "xyz1234"
Response.Cookies(CookieName).Domain = "xxxx.com"
%>
上面文件放在www主域名下,同時在同目錄下放置一個讀取cookie的Read.asp

Code:

Read.asp

<%
Response.Write Request.Cookies(CookieName)("UserName")
Response.Write Request.Cookies(CookieName)("Password")
%>
再放一個Read.asp文件到另外一個子域名站點裏,代碼同上。

最後我們再做一個清除cookie的Clear.asp放在主域名下

Code:

Clear.asp

<%
Response.Cookies(CookieName)("UserName") = ""
Response.Cookies(CookieName)("Password") = ""
Response.Cookies(CookieName).Domain = "xxxx.com"
%>
現在可以通過下面的執行順序來測試,Write.asp-->主域名的Read.asp-->子域名的Read.asp 所有Read.asp頁面都可以讀取到Write.asp創建的cookie的值
然後再運行Clear.asp進行清除,一切都Ok,看上去沒有什麼問題。

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

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


經過多次嘗試之後,無意中發現問題所在,以下是測試經過。

創建一個Write2.asp的頁面放在主域名下

<%
Response.Cookies(CookieName)("TEST_COOKIE") = "TEST_COOKIE"
%>
第一步:關閉瀏覽器後,按以下順序執行,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的值。

第四步:重新執行第二步,發現主域名Read.asp仍然輸出了值,而子域名下的Read.asp的值已經被清空了。


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

1、當你有一個Cookie組(或叫Cookie字典)使用Domain屬性指定域名之後,當你在對該組的成員進行修改或新增的時候,一定要在操作之後加上Resonse.Cookies(CookieName).Domain屬性。
2、如果沒有必要,請不要修改已設置Domain的Cookie組,直接使用Response.Cookies("CookieText") = CookieValue 來創建一個新的Cookie。

===========================

刪除cookie:

1、
設爲空值
HttpCookie cookieUserID=new HttpCookie("UserID","");

2、
直接清除
this.Response.Cookies.Clear();

3/
<%
For Each cookie in Request.Cookies
Response.Cookies(cookie)=""
Next%>

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