浏览器中,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浏览器中,通过诸如iframe、script、link访问资源或者页面的时候,默认是只带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的携带就很重要了。而且在这个过程中也出现过不少问题的,后续有空继续吐槽。
分享到:
相关推荐
`session`通常用于存储用户登录状态等临时信息,而`cookie`则作为`session` ID的载体在客户端和服务器之间传递。当用户访问网站并登录后,服务器会设置一个`session`,并将对应的`session ID`保存在客户端的`cookie`...
Tomcat_Session 的持久化是指将 HttpSession 对象保存到文件系统或数据库中,以便在服务器关闭或重启时可以恢复 Session 数据。下面详细讲解 Tomcat_Session 的持久化原理和实现机制。 一、Session 的使用 Session...
3. **后续请求**: 用户再次访问时,浏览器会将Session ID包含在请求头中发送给服务器。 4. **服务器识别**: 服务器根据Session ID找到对应的Session数据。 **优势**: 相对于Cookie而言,Session更安全,因为Session...
这篇名为"javaee-Session持久化小结"的文章可能涵盖了如何在JavaEE应用中实现Session的创建、管理和持久化。 首先,Session的创建通常是通过HttpSession接口的`getSession()`方法完成的。当用户首次访问服务器时,...
在Flask应用中,这通常涉及到响应对象(response)和请求对象(request)的交互,通过它们可以访问和修改HTTP头中的cookie信息。 标签“cookie 工具”进一步确认了这个项目的核心功能,即提供对cookie进行操作的...
它们被广泛应用于保持用户的登录状态,确保用户在访问不同页面时仍能保持个性化设置和数据连续性。本项目"基于Cookie的Session跨域"则关注如何在分布式环境中解决Session的共享问题,通过Spring和Spring MVC框架来...
- Cookie的生命周期可以通过设置过期时间来控制,支持会话级和持久化。 - Session的生命周期一般通过用户行为自动管理,比如一定时间不操作则自动过期。 4. **隐私和安全**: - Cookie可能涉及到用户隐私问题,...
标题与描述中的关键词“session和cookie区别”指向了两种在Web开发中常用的状态管理技术,它们各自具有独特的特性和用途。下面将详细阐述这两种技术的关键知识点: ### session和cookie的区别 **1. 定义与存储位置...
通过以上内容,我们可以清楚地了解到Cookie与Session的基本概念及其区别,同时对于会话Cookie与持久Cookie的不同也有了更深入的理解。在实际应用中,合理选择和使用这两种机制可以帮助开发者更好地管理用户的会话...
传统上,session信息存储在服务器端,通过Cookie在客户端和服务端之间传递session ID。然而,这种方式在某些情况下可能会受限,例如在无Cookie的场景或者有跨域需求时。SpringSession提供了解决这些问题的方案,它...
同时你可以通过ie、firefox去测试你对session、cookie的理解在此之前是否正确,可以简单告诉你session不是我们大都认为的在登录时候,通过request.getSession()产生的,而是你在首次访问一个应用时候,就已经产生了...
在Web开发中,Iframe(内联框架)常用于嵌入其他网页内容,但涉及到跨域访问时,尤其是在处理Cookie和Session时,会遇到一些挑战。本文主要探讨如何解决Iframe跨域访问Cookie和Session的问题。 首先,理解跨域访问...
在Web开发中,Cookie和Session是两种常见的用户身份验证机制,尤其在C#编程语言中,它们被广泛用于实现登录功能。本实例将探讨如何在C#环境下利用Cookie和Session来处理用户登录状态。 首先,我们要理解Cookie和...
在Web开发中,Session和Cookie是常见的用户状态管理工具,用于跟踪用户在网站上的行为。 Session是服务器端存储用户状态的一种方式。当用户登录网站后,服务器会在服务器端为该用户创建一个唯一的Session ID,并将...
有几种类型的Cookie,包括会话Cookie(Session Cookie)和持久化Cookie。会话Cookie在浏览器关闭后消失,而持久化Cookie则可以设定过期时间,即使浏览器关闭,再次打开时依然存在。 Session,另一方面,是在服务器...
处理Session跨域问题通常涉及到多个网站或应用之间共享用户身份验证信息。Session是Web应用程序用来存储用户特定数据的一种机制,通常存储在...同时,确保在跨域共享Session时注意安全问题,防止Session劫持和XSS攻击。
如果在Cookie中设置了"HttpOnly"属性,那么通过程序(JS脚本、Applet等)将无法读取到Cookie信息,这样能有效的防止XSS攻击。 对于以上两个属性, 首先,secure属性是防止信息在传递的过程中被监听捕获后信息泄漏,...
### JAVA之cookie与session #### 一、Cookie与Session的概念 **Cookie** 与 **Session** 是两种...在实际开发过程中,合理利用 Cookie 和 Session 的特性,可以有效提升用户体验,同时确保应用程序的安全性和稳定性。
在Web开发中,Cookie和Session是两种非常重要的用户状态管理机制。它们被广泛用于跟踪用户的登录状态、个性化设置等,确保用户在不同页面之间切换时能够保持一致性体验。接下来,我们将详细探讨Cookie和Session的...