zoukankan      html  css  js  c++  java
  • Cookie的跨域问题

    被误解的HttpCookie.Domain属性

    有人说可以利用HttpCookie.Domain属性实现跨域访问,假如在A站(A.com)中写B站(B.com)的cookie,如下所示

    这其实是错误的,运行后通过浏览器查看,并没有成功写入B站的cookie(读取也是一样失败,由于浏览器的隐私策略限制,禁止读取非本域的cookie).

    所以这个Domain属性,应该是可以跨子域,例如x.A.com和y.A.com,通过设置HttpCookie.Domain=“.A.com”,实现跨子域访问。

    //A站a_setCookie.aspx (www.a.com)
    HttpCookie cookie = new HttpCookie("key");
    cookie.Value = key;
    cookie.Domain = ".b.com";//这里指定的是B站
    cookie.Path = "/";
    cookie.Expires = DateTime.Now.AddHours(1);
    filterContext.RequestContext.HttpContext.Response.Cookies.Add(cookie);

    既然cookie无法跨域共享,那如何实现跨域访问呢?

    可以利用script标签间接调用B站的页面,实现写入B站cookie的目的。

    步骤一:先在B站(b_setCookie.aspx)下设置cookie的方法:

    HttpCookie cookie = new HttpCookie("key");
    cookie.Value = key;
    cookie.Domain = ".b.com";//这里指定的是B站
    cookie.Path = "/";
    cookie.Expires = DateTime.Now.AddHours(1);
    Response.Cookies.Add(cookie);
     

    步骤二:由于<script>标签可以自动访问第三方网站,因此可以在A站的页面,例如a_setCookie.aspx的页面<head>标签内下设置如下:

    <head><script src="http://www.b.com/b_setCookie.aspx" /></head>

    以上步骤完毕,当访问A站的a_setCookie.aspx时,就会自动访问http://www.b.com/b_setCookie.aspx,实现写入B站cookie的目的。

    测试B站cookie是否设置成功,B站下新建页面b_getCookie.aspx,读取B站的cookie

    var key=Request.cookie["key"];
    //或者
    key=Request["key"];

    注意:访问b_getCookie.aspx前,先访问A站的a_setCookie.aspx

    注意浏览器的第三方 cookie 限制

    所谓第三方 cookie,就是说你访问域名 A的一个页面,却接收到域名 B 的 cookie 设定指令。那么B就属于第三方,不同浏览器对于第三方cookie的限制有些区别,如下表

    不同浏览器的第三方 cookie 规则
     IEFIREFOXCHROMESAFARIOPERA
    限制第三方coookie

    使用p3p跨域设置Cookie

    p3p((Platform for Privacy Preferences))介绍

    http://baike.baidu.com/link?url=WVQp0aTUQgCoIzYm7rV_mur829NtWZCiSq9Kee_WusqmOWOQDwS2DNzw_S5M6UM-EcvNCliBHvYAV4kEjRBip_

    为了消除这个限制,可以在b_setCookie.aspx加上如下设置

    Response.Headers.Add("P3P", "CP=/"CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR/"");

     

  • 相关阅读:
    CF575A Fibonotci [线段树+矩阵快速幂]
    P3768 简单的数学题 [杜教筛,莫比乌斯反演]
    2-SAT 学习笔记
    CF776D The Door Problem [2sat]
    KD-Tree 学习笔记
    Mybatis入门笔记(2)——基于代理Dao实现CRUD
    Mybatis入门笔记(1)——基于原始dao实现CRUD
    mybatis入门看这一篇就够了
    使用JDBC程序的问题总结
    关于递归你知道多少?
  • 原文地址:https://www.cnblogs.com/imust2008/p/5409191.html
Copyright © 2011-2022 走看看