`
vincent_com
  • 浏览: 42341 次
  • 性别: 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域提供。
分享到:
评论

相关推荐

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

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

    php中cookie的作用域

    您可能感兴趣的文章:php中cookie实现二级域名可访问操作的方法php跨域cookie共享使用方法php中cookie的使用方法PHP CURL获取cookies模拟登录的方法PHP读取CURL模拟登录时生成Cookie文件的方法PHP会话控制:Session与...

    PHP关于IE下的iframe跨域导致session丢失问题解决方法

    很明显,session无法被保存。但是直接在地址栏打开那个登录页面,一切都正常啊。真是奇怪啊。 在网上搜索了一下。发现这个问题还真有不少人提及到。最后的解决方法是在那个登录页面里加上以下代码: 复制代码 代码...

    给localStorage设置一个过期时间的方法分享

    在 web 开发中,我们知道 cookie、session、localStorage都可以保存用户的数据,cookie的 domain、path 限制了 cookie 的跨域, 有数量和大小的限制,可以设置有效时间。 session是后台在浏览器注入一个设置了 ...

    SpringBoot项目中MVC使用-【SB系列之010】配套资源

    Token避免了Session机制带来的海量信息存储问题,也避免了Cookie机制的一些安全性问题,在现代移动互联网场景、跨域访问等场景有广泛的用途。 也是目前最主流的客户信息的保留方式。 提示:IT是一个要多动手的职业,...

    ASP.NET.4揭秘 卷2

    n313 读取cookie n314 设置cookie属性 n315 删除cookie n316 使用多值cookie n32 使用Session状态 n321 在Session状态中保存数据库数据 n322 使用Session对象 n323 处理Session事件 n324 会话失效控制 n325 使用无...

    java web技术开发大全(最全最新)

    4.6.4 实例:通过Cookie跟踪Session 4.6.5 实例:通过重写uRL跟踪Session 4.7 Web开发的中文问题 4.7.1 Java的编码原理 4.7.2 实例:解决输出中文乱码问题 4.7.3 实例:解决服务端程序读取中文请求消息的...

    社区后端:采用Node,Express,Mongo

    用户路由模型及鉴权认证(cookie-session) 部署图片上传 图片上传至七牛云 部署winston日志记录 配置错误处理方式 实现文章作者信息联合查询 使用聚合方式,联合数据。 日志: 0724: 完成了主题和用户的路由器和...

    java web开发技术大全

    4.6.4 实例:通过Cookie跟踪Session 4.6.5 实例:通过重写uRL跟踪Session 4.7 Web开发的中文问题 4.7.1 Java的编码原理 4.7.2 实例:解决输出中文乱码问题 4.7.3 实例:解决服务端程序读取中文请求...

    基于E2EE的无状态认证JsonWebToken算法、常用Web算法模块-易语言

    1、支持跨域访问: Cookie是不允许垮域访问的,这一点对Token机制是不存在的,前提是传输的用户认证信息通过HTTP头传输. 2、无状态(也称:服务端可扩展行):Token机制在服务端不需要存储session信息,因为Token 自身...

    ASP.NET4高级程序设计第4版 带目录PDF 分卷压缩包 part1

    3.4.1 Session、Application和Cache 3.4.2 Request 3.4.3 Response 3.4.4 Server 3.4.5 User 3.4.6 Trace 3.4.7 访问其他类中的HTTP上下文 3.5 总结 第4章 服务器控件 4.1 服务器控件的类型 ...

    IBM WebSphere Portal门户开发笔记01

    48、JS解决COOKIE跨域访问的问题之方法一 323 49、JS禁止复制网页代码 324 50、JS 禁止剪切、复制、粘贴的文本框代码 326 51、如何禁止火狐浏览器的右键功能 327 52、IE地址栏前换成自己的图标 327 53、关闭输入法 ...

    ASP.NET4高级程序设计(第4版) 3/3

    3.4.1 Session、Application和Cache 84 3.4.2 Request 85 3.4.3 Response 86 3.4.4 Server 88 3.4.5 User 90 3.4.6 Trace 91 3.4.7 访问其他类中的HTTP上下文 96 3.5 总结 96 第4章 服务器控件 ...

Global site tag (gtag.js) - Google Analytics