關於Cookie跨域的問題
Cookie是一個偉大的發明,它允許Web開發者保留他們的使用者的登入狀態。但是當你的站點有一個以上的域名時就會出現問題了。在Cookie規範上說,一個cookie只能用於一個域名,不能夠發給其它的域名。因此,如果在瀏覽器中對一個域名設定了一個cookie,這個cookie對於其它的域名將無效。如果你想讓你的使用者從你的站點中的其中一個進行登入,同時也可以在其它域名上進行登入,這可真是一個大難題。
跨二級域名
我們知道cookie是可以跨二級域名來訪問,這個很好理解,例如你 www.test1.com 在的web應用程式建立了一個cookie,要想在bbs.test1.com這樣的二級域名對應的應用程式中訪問,就必須你在建立cookie的時候設定domain引數domain=test1.com。 以asp.net為例 程式碼如下:
1 2 3 4 |
HttpCookie
cookie = new
HttpCookie( "name" ,
"www.Admin10000.com" );
cookie.Domain
= "test1.com" ;
cookie.Path
= "/" ;
Response.Cookies.Add(cookie);
|
跨頂級域名
如果我不是二級域名而是完全在不同頂級域名中,例如 www.test1.com 所在的web應用程式建立了一個cookie,想要在 www.test2.com 或其二級域名的應用程式中訪問,改怎麼辦呢?我們知道靠常規反的方法是訪問不了的,關鍵我們就是看看有沒有方法可以訪問。事實是Cookie可以在一定條件下跨域,而不是隨心所欲的實現跨域。
我們來做個測試,看看兩個站點 www.test1.com 和 www.test2.com 如何實現cookie跨域訪問。 按照常規我們需要有2個頂級域名,並且有DNS伺服器才能夠配置域名,否則我們是無法驗證的,但是這裡我們也沒有必要那麼麻煩,我們可以通過修改hosts檔案來模擬。在 c:\windows\system32\drivers\etc 中有 hosts檔案,在末尾新增上
127.0.0.1 www.test1.com 127.0.0.1 www.test2.com
兩行,就可以將本機用上面的域名訪問本機迴環地址了。我們只需要在IIS上部署一套程式,ip為本機迴環地址,用兩個域名分別訪問就可以了。
我們新建三個頁面,分別是 Default.aspx、SSO.ashx、GetCookie.aspx。
其中Default.aspx是 www.test1.com 的頁面,訪問的地址是 http://www.test1.com/Default.aspx。看一下前臺程式碼,它沒有任何後臺程式碼
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
<%@
Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="Admin10000.Web.Default" %>
< head
runat = "server" >
< title ></ title >
</ head >
< body >
< form
id = "form1"
runat = "server" >
< div >
< script
type = "text/javascript" >
var
_frm = document.createElement("iframe");
_frm.style.display
= "none";
document.body.appendChild(_frm);
|