`
vincent_com
  • 浏览: 45118 次
  • 性别: Icon_minigender_1
  • 来自: 上海
最近访客 更多访客>>
社区版块
存档分类

跨域读取Cookie和session

 
阅读更多


在网上找了很多跨域读取Cookie的方法,但都是A域主动设置B域的Cookie,而没有B域去获取A域Cookie的方法。

所谓A域主动设置B域的Cookie

1:在B.com上新建一文件:SetCookie.aspx
protected void Page_Load(object sender, EventArgs e)
         {
             HttpContext.Current.Response.AddHeader("p3p", "CP=CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR");
             HttpCookie cookie = new HttpCookie("userid", "44");
             cookie.Domain = ".b.com";
            
            //   cookie.Expires = DateTime.Now.AddSeconds((double)expires);
             HttpContext.Current.Response.AppendCookie(cookie);
         }
2:在A域新建一文件:Default.aspx,在前台页面调用B域的SetCookie.aspx页面,来为B域设置相应的Cookie.
     <script src="http://www.b.com/SetCookie.aspx"></script>
3:在B域新建一文件:Default.aspx来显示被A域设置的Cookie。
protected void Page_Load(object sender, EventArgs e)
     {
       
         Response.Write(Request.Cookies["userid"] == null ? "" : Request.Cookies["userid"].Value.ToString());
     }
4:以此访问www.a.com/default.aspx---->www.b.com/default.aspx

以上为A域主动设置B域的Cookie,适用于单点登录,但必须在B域,C域或D域上新建setcookie.aspx文件来让A域帮忙设置Cookie。

那B域C域或D域如何根据自身的需要去主动获取A域的Cookie呢?请看以下方法,以下方法为此文重点。

1:在A域新建一文件:SetCookie.aspx,此文件用来设置A域自己的Cookie。
   protected void Page_Load(object sender, EventArgs e)
         {
             HttpCookie cookie = new HttpCookie("userid", "44");
             HttpContext.Current.Response.AppendCookie(cookie);
         }
2:A域的Cookie设置完了,那怎么让其他域来读取自己的Cookie呢,这就是重点了。
新建一页面:OpenID.aspx,用来让B域读取Cookie,并自动设置B域的cookie。(这里有点昏)   
    protected void Page_Load(object sender, EventArgs e)
     {
         HttpContext.Current.Response.AddHeader("p3p", "CP=CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR");
        if (Request.Cookies["userid"] != null)
         {
             Response.Write(@"
             var userid=" + Request.Cookies["userid"].Value.ToString() + @";
             SetCookie('userid',userid);//什么域调用此文件,设置的Cookie将是什么域的。
             window.location.href=document.URL;
                  function SetCookie(name,value)//两个参数,一个是cookie的名子,一个是值
                 {
                    document.cookie = name + ""=""+ escape (value) ;
                  }
             ");
         }
        else
         {
             Response.Write("document.write('没有cookie');");
         }
     }


3:A域的工作已经完了,那B域如何得到A域的这个Cookie值呢,在B域新建一页:default.aspx
protected void Page_Load(object sender, EventArgs e)
         {
           if (HttpContext.Current.Request.Cookies["userid"] != null)
             {
                 Label1.Text = HttpContext.Current.Request.Cookies["userid"].Value.ToString();
             }
            else
             {
                 Response.Write(" <script src=\"http://www.a.com/openid.aspx\"></script>");
              
             }
         }

4:依次访问 www.a.com/setcookie.aspx ------> www.b.com/default.aspx    此方法用于A域开发API给其他域调用。主要用于A域API接口的开发。就像现在的SNS网站提供当前登录的用户信息给其他应用程序(如抢车位)一样,不过我不知道他们是怎么实现的,但我用此方法实现了。
总结下此方法的步骤:
1:A域设置cookie
2:B域用调用javascript脚本的方式读取A域cookie,读取后,并同步设置B域Cookie.
3:调用B域时,发现没有cookie就自动从A域获取cookie值来设置自己的Cookie。
A域可以把怎么读取的方法做成dll,提供给其他域。这称之为A域的API。

测试成功,用此方法能跨域读取session,方式是:把A域的Session值存入B域的cookie中。至于怎么存,存在什么cookie名称里,由A域提供。
分享到:
评论

相关推荐

    关于Iframe如何跨域访问Cookie和Session的解决方法

    这样,当Iframe加载admin.php时,浏览器会接受P3P头,允许在不同域之间设置和读取Cookie,从而实现跨域登录。 至于Session,虽然它看起来与Cookie不同,但它们在很多情况下密切相关。Session通常依赖于Cookie来存储...

    cookie和session完全讲解(精通必备)

    - 在PHP中,使用`setcookie()`函数设置Cookie,通过`$_COOKIE`超全局数组读取Cookie值。 - 设置Cookie时需指定名称、值、过期时间和作用域等参数。 - 默认情况下,Cookie仅在设置它的页面及其子目录内有效,通过...

    解决前后端分离 vue+springboot 跨域 session+cookie失效问题

    在前后端分离的架构中,Vue.js作为前端框架与Spring Boot作为后端服务进行交互时,常常会遇到跨域和Session、Cookie失效的问题。本文将详细介绍如何解决这些问题。 首先,跨域是由于浏览器的安全策略限制,同一源...

    08Cookie和Session1

    此外,Cookie大小有限制,且通常不能跨域使用,这意味着一个网站设置的Cookie不会被其他网站读取。 5. **Java中的Cookie操作**:在Java的Servlet环境中,Cookie被封装在`javax.servlet.http.Cookie`类中。服务器...

    利用Cookie、Session写的登录页面、成功页面、退出页面

    在成功页面,服务器通过读取Cookie来确认用户已登录,并显示相应的个性化内容。退出页面,通常会清除与用户身份相关的Cookie,以实现用户登出功能。 2. Session: - 定义:Session是在服务器端存储的一系列数据,...

    java web session跨域共享(redis)

    然而,当涉及到跨域访问时,由于浏览器的同源策略限制,不同域名下的站点无法读取对方的Cookie,包括Session ID,因此Session也无法共享。这就需要我们引入外部存储,如Redis,来作为Session仓库。 以下是使用Redis...

    Cookie与Session机制

    如果要考虑跨域共享,Cookie可以设置为跨域,但Session通常不支持。此外,对于移动设备或隐私意识强的用户,可能更倾向使用Session而非Cookie。在设计Web应用时,理解这两种机制的优缺点,并结合实际需求进行选择,...

    Session跨域共享demo

    创建一个继承自`SessionStateStoreProviderBase`的类,并重写其方法,以实现跨域存储和读取Session数据。这可能涉及到在数据库、缓存服务或其他持久化存储中保存Session数据。 4. **配置调整** 在Web.config中,...

    login for cookie or session or token

    标题"login for cookie or session or token"涉及了三种常见的用户身份验证方法:Cookie、Session和Token。让我们深入探讨这些概念及其在Golang(一种流行的开源编程语言)中的实现。 1. **Cookie**: Cookie是一...

    带你了解session和cookie作用原理区别和用法

    读取Cookie则使用`$_COOKIE['user']`。 - **Session**:在PHP中,启动Session使用`session_start()`,设置Session变量如`$_SESSION['user'] = "zy"`,读取使用`$_SESSION['user']`。结束Session用`session_destroy...

    cookie保存并读取用户登录信息

    5. **自动登录机制**:自动登录通常结合Session和Cookie实现。当用户登录成功后,服务器会创建一个Session,并将用户信息保存在Session中,同时在客户端设置一个Session ID的Cookie。这样,下次用户访问时,服务器...

    深入理解session,cookie

    在这个场景下,Cookie和Session成为了关键的角色。接下来,我们将深入探讨这两种技术的工作原理及其在Servlet和JSP中的应用。 首先,我们来看Cookie。Cookie是由服务器端创建并在HTTP响应头中发送到客户端(通常是...

    java Session cookie

    为了解决这个问题,Session和Cookie应运而生,而Session Cookie是其中的一种方式。 **什么是Cookie?** Cookie是由服务器端发送到客户端(浏览器)的一小段信息,存储在用户的本地设备上。当客户端发起新的请求时,...

    jquery.cookie.js 以及用法 cookie读取与存储

    读取Cookie同样使用`$.cookie()`函数,但这次不提供第二个参数。函数会返回对应Cookie的值。 ```javascript var cookieValue = $.cookie('myCookie'); console.log(cookieValue); // 输出 "Hello, World!" ``` ###...

    Yii2.0中的COOKIE和SESSION用法

    **注意事项:** 在修改或删除Cookie时,需要使用`response`组件,而读取Cookie时则使用`request`组件。 ### Session **1. 添加Session** Yii2的Session操作相对简单,直接通过`Yii::$app-&gt;session`即可: ```php...

    跨域页面访问问题解决.doc

    跨域页面访问问题是指在多个系统集成的情况下,主系统以 iframe 或 frameset 的方式将其他子系统的页面嵌进来,导致浏览器阻止 iframe 或 frameset 的 cookie,进而使 SESSION 失效。解决办法是,在子系统的登录代码...

    ThinkPHP的cookie和session冲突造成Cookie不能使用的解决方法

    - ThinkPHP提供了一套完善的Cookie和Session管理API,开发者可以通过这些API方便地设置、读取和删除Cookie和Session。 - 在使用Session时,ThinkPHP会自动处理Session ID的生成和存储,通常默认将Session ID存储在...

    JWT相关知识及Cookie, Session,Token和JWT的区别总结.pdf

    总结来说,Cookie、Session和JWT都是处理身份验证和会话管理的方式,各有优劣。Cookie适合简单的Web应用,Session适用于需要服务器保持状态的场景,而JWT则在分布式系统和无状态认证中表现出色。理解它们之间的差异...

    跨域单点登录

    文件`dddl.php`可能是实现这些功能的一部分代码,例如处理session数据的存储和读取,或者处理跨域认证的逻辑。具体代码细节无法提供,因为没有实际的文件内容。通常,`dddl.php`可能会包含以下部分: - 一个自定义...

    asp cookie注入读取通用代码

    3. **跨域问题**:Cookie的域限制意味着它只能在设置它的域内被读取。如果需要在不同子域名之间共享登录状态,需要设置Cookie的域属性。 4. **隐私政策**:在使用Cookie时,必须遵守相关的隐私政策和法规,告知用户...

Global site tag (gtag.js) - Google Analytics