浏览器中,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的携带就很重要了。而且在这个过程中也出现过不少问题的,后续有空继续吐槽。
分享到:
相关推荐
iframe 跨域访问session问题解决方法
同时你可以通过ie、firefox去测试你对session、cookie的理解在此之前是否正确,可以简单告诉你session不是我们大都认为的在登录时候,通过request.getSession()产生的,而是你在首次访问一个应用时候,就已经产生了...
Tomcat_Session的持久化,详细讲解tomcatsession管理的原理和持久化原理
如果在Cookie中设置了"HttpOnly"属性,那么通过程序(JS脚本、Applet等)将无法读取到Cookie信息,这样能有效的防止XSS攻击。 对于以上两个属性, 首先,secure属性是防止信息在传递的过程中被监听捕获后信息泄漏,...
一、cookie机制和session机制的区别 ...... 二、会话cookie和持久cookie的区别 ......
在tomcat实现对session的持久化,如果浏览的用户过大,避免服务器的内存消耗太大,影响性能。
session 和cookie 区别!!
session与cookie的区别和联系?
项目采用Spring、SpringMVC技术、具体实现的功能为基于Cookie技术的Session跨域功能
博文链接:https://wangxuliangboy.iteye.com/blog/237534
Response对象用语输出数据到客户端,包括向浏览器输出数据、重定向浏览器到另一个URL或向浏览器输出Cookie文件。 Request对象主要是让服务器取得...Session即会话,是指一个用户在一段时间内对某一个站点的一次访问。
测试的过程中,经常会有这样的疑惑,什么是Cookie,什么是Session什么是Token,三者的区别又是什么,又是怎么使用的呢,这个文档跟大家详细介绍下三者的区别与使用
j2ee实验二:学习使用Session和Cookie
//访问 cookie变量 和变通变量一样 setcookie(’user_id’,0,time()-1);//删除cookie变量 // codie end // 该代码不可运行,只是将所有使用方法在这里列出,实际应该不同功能在不同页面使用,将在下面的例子中演示
flask、session、cookie解加密脚本
1.3. webLogic集群Session持久化配置 4 2. Weblogic集群的体系架构 5 2.1. 单层混合型的集群架构(Cluster) 5 2.2. 多层结构的集群架构(Cluster) 5 2.3. 配置集群应用的必要条件 6 3. Weblogic集群的安装与配置 6...
这是一份关于cookie和session的知识文档,有关于cookie是什么,图解,cookie对比session有哪些不好,session是什么图解
解决springboot实现跨域session共享问题,防止sql注入。可以更有效的解决token问题,欢迎下载,有问题可以再评论下方留言,及时解答!!加群:687942640
注意:如果不设置持久化时间,cookie会存储在浏览器的内存中,浏览器关闭 cookie信息销毁(会话级别的cookie),如果设置持久化时间,cookie信息会 被持久化到浏览器的磁盘文件里 示例: cookie.setMaxAge(10*60); ...
使用python脚本更改或生成cookie