利用P3P實現單點登錄和COOKIE的跨域讀寫
首先說明,同一個頂級域名的情況我不說什麼,很簡單,就一個Cookie的Domain屬性。
下面來說頂級域名不同的情況。
有時候我們會有這麼一種需求:當我們登錄A網站www.a.com時,同時也要能登錄B網站www.b.com,繼而訪問B網站需要登錄才能看到的信息。這個時候怎麼辦呢?那有人會說用SSO(單點登錄)來做。SSO可能會有多種的實現方式,但是我們這裏只介紹利用P3P來實現的方式。也就是如標題所說:利用P3P實現單點登錄和COOKIE的跨域讀寫。
至於P3P是什麼,我也不是很清楚,如果想知道,去問百度吧。還有如果您對P3P還不怎麼認可,那麼我就多說一句:DISCUZ論壇和PhpcmsV9都是通過這種方式來實現單點登錄的,怎麼樣?這下認可了吧?
下面貼出例子,供大家參考。
A網站有兩個頁面,一個用來設置COOKIE,如下:
index.asp
<% Dim username : username = "subendong" Response.Cookies("username") = username %> <iframe src="http://www.b.com/index.asp?username=<%=username%>"></iframe> <script type="text/javascript"> window.location.href = "http://www.b.com/show.asp"; </script>
一個用來讀取COOKIE
main.asp
<% Response.Write(Request.Cookies("username")) %>
特別注意:在做登錄的時候,如果登錄之後想立即跳轉的話,不能用服務器端腳本Redirect,必須用Javascript的window.location.href跳轉。信不信由你。
B網站有兩個頁面,一個是用來同步設置COOKIE的,如下:
index.asp
<% Response.AddHeader "P3P", "CP=CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR" Response.Cookies("username") = Request("username") Response.Write(Request.Cookies("username")) %>
另一個是是訪問COOKIE的,如下:
show.asp
<% Response.Write(Request.Cookies("username")) %>
代碼是用ASP寫的,PHP和ASP.NET或者JSP原理都是一樣的。
看完代碼是不是覺得很簡單?不像以前別人寫的那麼複雜。看懂的支持下吧。
這裏有個地方需要注意:如果沒有實現效果,估計是因爲使用iframe時,www.b.com站點還沒有成功寫入cookie,這時你可以使用setTimeout()來延遲轉向。
原文地址:http://www.cnblogs.com/subendong/archive/2013/04/28/3049348.html
其他類似文章:
http://blog.csdn.net/cuihaiyang/article/details/8106651
http://hacpai.com/article/1407146861362