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

  • 相关阅读:
    leetcode1161 Maximum Level Sum of a Binary Tree
    leetcode1162 As Far from Land as Possible
    leetcode107 Binary Tree Level Order Traversal II
    leetcode100 Same Tree
    spring常用注解的使用
    内部bean和级联属性的用法
    spring中ref标签的用法
    spring的依赖注入
    spring中的bean标签详解
    spring中BeanFactory和ApplicationContext的区别
  • 原文地址:https://www.cnblogs.com/subendong/p/3049348.html
Copyright © 2020-2023  润新知