文档章节

cookie跨域解决方案

菜蚜
 菜蚜
发布于 2016/01/30 10:50
字数 356
阅读 136
收藏 16

我们知道对于相同域名主体的顶级域名和其他级别域名的cookie共享已经有解决方案,那就是设置统一的domain和path。

那么不同域名主体的各级域名读写cookie的话,可以使用http的header头属性p3p。

设置这个属性主要为了解决IE的cookie跨域问题,可以使用iframe或img标签来实现。

P3P(Platform for Privacy Preferences)在java中的使用:

a.com域名下建立index.jsp,引用b.com的设置或获取cookie的路径:

<html>
<body>
<h2>a.com</h2>
<iframe src="http://b.com/test/setcookie">
    this is an iframe.
</iframe>
</body>
</html>

b.com的setcookie:

@RequestMapping("/test/setcookie")
public ModelAndView setcookie(HttpServletResponse response){
    response.setHeader("P3P", "CP=\"IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT\"");
    Cookie cookie = new Cookie("testp3p", "p3pvalue");
    cookie.setPath("/");
    response.addCookie(cookie);
    return new ModelAndView("cookie");
}
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>b.com</title>
</head>
<body>
cookie设置完毕!
</body>
</html>

b.com建立index.jsp:

<%@ page import="com.alibaba.fastjson.JSON" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<body>
<h2>b.com</h2>
<%
    out.write(JSON.toJSONString(request.getCookies()));
%>
</body>
</html>

操作顺序:访问a.com的index.jsp,新开tab访问b.com的index.jsp,观察两边cookie的情况。

使用场景:

比如:login.taobao.com登录了,将记录会话的cookie写入".taobao.com",同时发起一个请求,将cookie传递到tmall域名并写入".tmall.com";当然taobao可并不是这么干的哈哈。


关于各种语言设置p3p的方式可参照http://viralpatel.net/blogs/how-to-set-third-party-cookies-with-iframe/

© 著作权归作者所有

共有 人打赏支持
菜蚜
粉丝 28
博文 76
码字总数 36325
作品 0
杭州
程序员
私信 提问
分享跨域访问的解决方案与基础分析

什么是跨域访问? 由于浏览器同源策略,凡是发送请求url的协议、域名、端口三者之间任意一个与当前页面地址不同即为跨域。存在跨域的情况: 网络协议不同,如http协议访问https协议。 端口不...

逍遥侠
11/01
0
0
在ASP.NET MVC3 中利用JSONP跨域登录WEB系统(加强版)

本文为 在ASP.NET MVC3 中利用JSONP跨域登录WEB系统 这篇文章的改进版。在上文中首先感谢园友们的热心讨论。本文将对跨域登录进行一改进,改进内容如下: 跨域登录后不同系统之间的cookie管理...

彭博
2012/03/09
0
0
Nginx允许跨域和禁止跨域操作

Nginx默认是禁止跨域操作,可能说到跨域好多伙伴会有点迷糊,什么叫跨域?为什么不能跨域呢? 看下面小编的详解。 禁止跨域的原因是这样可以更安全,据小编了解假如浏览器记录了a.com的网站上...

xinsir999
2017/08/03
0
0
ajax跨域问题

当两个域具有相同的协议(如http), 相同的端口(如80),相同的host(如www.example.org),那么我们就可以认为它们是相同的域 Access-Control-Allow-Origin解决Ajax跨域问题// 指定可信任的域名...

ITCHN
2016/12/22
15
0
浏览器同源策略及 Ajax 跨域解决方案

因为在开发过程中会经常遇到因为浏览器同源策略而导致的跨域问题,而多数开发者对浏览器同源策略和跨域问题并没有很清晰的认识,所以打算在这篇文章中说下浏览器同源策略和我们最经常会遇到的...

淘淘笙悦
07/13
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Go 使用channel控制并发

前言 channel一般用于协程之间的通信,channel也可以用于并发控制。比如主协程启动N个子协程,主协程等待所有子协程退出后再继续后续流程,这种场景下channel也可轻易实现。 场景示例 总结 ...

恋恋美食
36分钟前
1
0
Apache Flink 漫谈系列 - 持续查询(Continuous Queries)

摘要: 实际问题 我们知道在流计算场景中,数据是源源不断的流入的,数据流永远不会结束,那么计算就永远不会结束,如果计算永远不会结束的话,那么计算结果何时输出呢?本篇将介绍Apache Fl...

阿里云官方博客
40分钟前
9
0
斐波那契堆的理解,节点mark属性和势函数

斐波那契堆 看了好多博客,都是照搬算法导论的内容,没有自己的理解,比如为什么有mark属性,势函数的作用,以及为什么叫斐波那契堆,下面说说鄙人的理解。 势函数 势函数是根节点个数加上2...

杨喆
41分钟前
4
0
NIO源码详解

阻塞io和无阻塞io: 阻塞io是指jdk1.4之前版本面向流的io,服务端需要对每个请求建立一堆线程等待请求,而客户端发送请求后,先咨询服务端是否有线程相应,如果没有则会一直等待或者遭到拒 ...

沉稳2018
45分钟前
0
0
如何把已经提交的commit, 从一个分支放到另一个分支

在本地master提交了一个commit(8d85d4bca680a5dbcc3e5cfb3096d18cd510cc9f),如何提交的test_2分之上? git checkout test_2git cherry-pick 8d85d4bca680a5dbcc3e5cfb3096d18cd510cc9f......

stephen_wu
49分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部