Cookie是一個(gè)偉大的發(fā)明,它允許Web開發(fā)者保留他們的用戶的登錄狀態(tài)。但是當(dāng)你的站點(diǎn)有一個(gè)以上的域名時(shí)就會出現(xiàn)問題了。在Cookie規(guī)范上說,一個(gè)cookie只能用于一個(gè)域名,不能夠發(fā)給其它的域名。因此,如果在瀏覽器中對一個(gè)域名設(shè)置了一個(gè)cookie,這個(gè)cookie對于其它的域名將無效。如果你想讓你的用戶從你的站點(diǎn)中的其中一個(gè)進(jìn)行登錄,同時(shí)也可以在其它域名上進(jìn)行登錄,這可真是一個(gè)大難題。
跨二級域名我們知道cookie是可以跨二級域名來訪問,這個(gè)很好理解,例如你 www. 在的web應(yīng)用程序創(chuàng)建了一個(gè)cookie,要想在bbs.這樣的二級域名對應(yīng)的應(yīng)用程序中訪問,就必須你在創(chuàng)建cookie的時(shí)候設(shè)置domain參數(shù)domain=。 以asp.net為例 代碼如下:
跨頂級域名如果我不是二級域名而是完全在不同頂級域名中,例如 www. 所在的web應(yīng)用程序創(chuàng)建了一個(gè)cookie,想要在 www. 或其二級域名的應(yīng)用程序中訪問,改怎么辦呢?我們知道靠常規(guī)反的方法是訪問不了的,關(guān)鍵我們就是看看有沒有方法可以訪問。事實(shí)是Cookie可以在一定條件下跨域,而不是隨心所欲的實(shí)現(xiàn)跨域。 我們來做個(gè)測試,看看兩個(gè)站點(diǎn) www. 和 www. 如何實(shí)現(xiàn)cookie跨域訪問。 按照常規(guī)我們需要有2個(gè)頂級域名,并且有DNS服務(wù)器才能夠配置域名,否則我們是無法驗(yàn)證的,但是這里我們也沒有必要那么麻煩,我們可以通過修改hosts文件來模擬。在 c:\windows\system32\drivers\etc 中有 hosts文件,在末尾添加上 127.0.0.1 www. 127.0.0.1 www. 兩行,就可以將本機(jī)用上面的域名訪問本機(jī)回環(huán)地址了。我們只需要在IIS上部署一套程序,ip為本機(jī)回環(huán)地址,用兩個(gè)域名分別訪問就可以了。 我們新建三個(gè)頁面,分別是 Default.aspx、SSO.ashx、GetCookie.aspx。 其中Default.aspx是 www. 的頁面,訪問的地址是 http://www./Default.aspx。看一下前臺代碼,它沒有任何后臺代碼
另外一個(gè)是 SSO.ashx 頁面,我們認(rèn)為它是 www. 的頁面,前臺沒有任何代碼,后臺代碼如下:
|
|