利用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()来延迟转向。

posted @ 2013-04-28 15:09  屌丝大叔的笔记  阅读(1338)  评论(0编辑  收藏  举报