`

Session cookie、持久化Cookie和P3P头在跨域访问时候的行为

阅读更多

浏览器中,Cookie分为两类,Session Cookie和持久化Cookie。

如果在创建Cookie的时候,只设置了key和value,则是Session Cookie;如果 创建 Cookie的时候,不仅设置了key/value,同时设置了Cookie的生存时间,则这样的Cookie是持久化Cookie。

以下是java中创建Session Cookie和持久化Cookie的方式:

//Session Cookie
Cookie sessionCookie = new Cookie("s", "session");
//持久化Cookie
Cookie persCookie = new Cookie("p","persistance");
persCookie.setMaxAge(100000);

ie浏览器中,通过诸如iframescriptlink访问资源或者页面的时候,默认是只带Session Cookie的,持久化的Cookie是不携带过去的。

现在有一个页面main.jsp,上边有一个访问了别的域下的javascript文件的<script>标签和一个访问了别的域名的iframe:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=GB18030">
		<meta http-equiv="pragma" content="no-cache"/>
		<script type="text/javascript" src="http://10.13.103.37:8080/CookieTest/helloworld.js"></script>
		<title>main</title>
	</head>
	<body>
		main
		<br><br>
		<hr>
		<iframe src="http://10.13.103.37:8080/CookieTest/csrf.jsp" id="abc" width="800" height="600"></iframe>
	</body>
</html>

另外有一个servlet是用来设置cookie的,设置了一个session cookie一个持久化cookie:

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
	//Session Cookie
	Cookie sessionCookie = new Cookie("s", "session");
	//持久化Cookie
	Cookie persCookie = new Cookie("p","persistance");
	persCookie.setMaxAge(100000);
	response.addCookie(sessionCookie);
	response.addCookie(persCookie);
	getServletConfig().getServletContext().getRequestDispatcher("/csrf.jsp").forward(request, response);
}

 

先调用这个Servlet给http://10.13.103.37:8080/这个域下设置Cookie:

 

然后请求main.jsp,会发现script和iframe中的请求都只带了Session Cookie:

 

 

但是如果此前一次请求的响应有P3P头返回,则可以跨域读写Cookie的,包括持久化的Cookie

设置P3P头:

 

response.addHeader("P3P", "CP=CURa ADMa DEVa PSAo PSDo OUR BUS NUI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR");

 

访问有设置P3P头的Servlet设置cookie:

设置后跨域请求js和iframe请求页面:

 

 

 

这些东西什么地方会用到呢?

在淘宝系统中,淘宝和天猫都是独立的域名,付款是支付宝的付款,也是单独的域名,三个站点之间的交互是很频繁的,也会存在跨域访问的问题,跨域认证又需要单点登录的时候,cookie的携带就很重要了。而且在这个过程中也出现过不少问题的,后续有空继续吐槽。

分享到:
评论

相关推荐

    iframe 跨域访问session

    `session`通常用于存储用户登录状态等临时信息,而`cookie`则作为`session` ID的载体在客户端和服务器之间传递。当用户访问网站并登录后,服务器会设置一个`session`,并将对应的`session ID`保存在客户端的`cookie`...

    Tomcat_Session的持久化

    Tomcat_Session 的持久化是指将 HttpSession 对象保存到文件系统或数据库中,以便在服务器关闭或重启时可以恢复 Session 数据。下面详细讲解 Tomcat_Session 的持久化原理和实现机制。 一、Session 的使用 Session...

    Cookie、Session和Token三者的区别及使用

    3. **后续请求**: 用户再次访问时,浏览器会将Session ID包含在请求头中发送给服务器。 4. **服务器识别**: 服务器根据Session ID找到对应的Session数据。 **优势**: 相对于Cookie而言,Session更安全,因为Session...

    javaee-Session持久化小结

    这篇名为"javaee-Session持久化小结"的文章可能涵盖了如何在JavaEE应用中实现Session的创建、管理和持久化。 首先,Session的创建通常是通过HttpSession接口的`getSession()`方法完成的。当用户首次访问服务器时,...

    flask-session-cookie-manager

    在Flask应用中,这通常涉及到响应对象(response)和请求对象(request)的交互,通过它们可以访问和修改HTTP头中的cookie信息。 标签“cookie 工具”进一步确认了这个项目的核心功能,即提供对cookie进行操作的...

    基于Cookie的Session跨域.zip

    它们被广泛应用于保持用户的登录状态,确保用户在访问不同页面时仍能保持个性化设置和数据连续性。本项目"基于Cookie的Session跨域"则关注如何在分布式环境中解决Session的共享问题,通过Spring和Spring MVC框架来...

    session与cookie的区别和联系?

    - Cookie的生命周期可以通过设置过期时间来控制,支持会话级和持久化。 - Session的生命周期一般通过用户行为自动管理,比如一定时间不操作则自动过期。 4. **隐私和安全**: - Cookie可能涉及到用户隐私问题,...

    session 和cookie 区别

    标题与描述中的关键词“session和cookie区别”指向了两种在Web开发中常用的状态管理技术,它们各自具有独特的特性和用途。下面将详细阐述这两种技术的关键知识点: ### session和cookie的区别 **1. 定义与存储位置...

    经典收藏Cookie和Session

    通过以上内容,我们可以清楚地了解到Cookie与Session的基本概念及其区别,同时对于会话Cookie与持久Cookie的不同也有了更深入的理解。在实际应用中,合理选择和使用这两种机制可以帮助开发者更好地管理用户的会话...

    SpringSession同时支持Cookie和header策略

    传统上,session信息存储在服务器端,通过Cookie在客户端和服务端之间传递session ID。然而,这种方式在某些情况下可能会受限,例如在无Cookie的场景或者有跨域需求时。SpringSession提供了解决这些问题的方案,它...

    session、cookie的跨域共享

    同时你可以通过ie、firefox去测试你对session、cookie的理解在此之前是否正确,可以简单告诉你session不是我们大都认为的在登录时候,通过request.getSession()产生的,而是你在首次访问一个应用时候,就已经产生了...

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

    在Web开发中,Iframe(内联框架)常用于嵌入其他网页内容,但涉及到跨域访问时,尤其是在处理Cookie和Session时,会遇到一些挑战。本文主要探讨如何解决Iframe跨域访问Cookie和Session的问题。 首先,理解跨域访问...

    c#实现cookie和session的登陆实例

    在Web开发中,Cookie和Session是两种常见的用户身份验证机制,尤其在C#编程语言中,它们被广泛用于实现登录功能。本实例将探讨如何在C#环境下利用Cookie和Session来处理用户登录状态。 首先,我们要理解Cookie和...

    TP5 Session和Cookie

    在Web开发中,Session和Cookie是常见的用户状态管理工具,用于跟踪用户在网站上的行为。 Session是服务器端存储用户状态的一种方式。当用户登录网站后,服务器会在服务器端为该用户创建一个唯一的Session ID,并将...

    对session和cookie的一些理解

    有几种类型的Cookie,包括会话Cookie(Session Cookie)和持久化Cookie。会话Cookie在浏览器关闭后消失,而持久化Cookie则可以设定过期时间,即使浏览器关闭,再次打开时依然存在。 Session,另一方面,是在服务器...

    Session Cookie的HttpOnly和secure属性

    如果在Cookie中设置了"HttpOnly"属性,那么通过程序(JS脚本、Applet等)将无法读取到Cookie信息,这样能有效的防止XSS攻击。 对于以上两个属性, 首先,secure属性是防止信息在传递的过程中被监听捕获后信息泄漏,...

    处理session跨域几种方案

    处理Session跨域问题通常涉及到多个网站或应用之间共享用户身份验证信息。Session是Web应用程序用来存储用户特定数据的一种机制,通常存储在...同时,确保在跨域共享Session时注意安全问题,防止Session劫持和XSS攻击。

    JAVA之cookie与session

    ### JAVA之cookie与session #### 一、Cookie与Session的概念 **Cookie** 与 **Session** 是两种...在实际开发过程中,合理利用 Cookie 和 Session 的特性,可以有效提升用户体验,同时确保应用程序的安全性和稳定性。

    cookie和session示例

    在Web开发中,Cookie和Session是两种非常重要的用户状态管理机制。它们被广泛用于跟踪用户的登录状态、个性化设置等,确保用户在不同页面之间切换时能够保持一致性体验。接下来,我们将详细探讨Cookie和Session的...

Global site tag (gtag.js) - Google Analytics