跨域名sso單點登錄、利用p3p實現cookie跨域

利用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


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