详解cookie

【定义】

Cookie(复数形态Cookies),中文名称为小型文字文件或小甜饼[1],指某些网站为了辨别用户身份而储存在用户本地终端(Client Side)上的数据(通常经过加密)。定义于RFC2109。为网景公司的前雇员Lou Montulli19933月所发明。

分类

【分类】

Cookie总是保存在客户端中,按在客户端中的存储位置,可分为内存Cookie和硬盘Cookie

内存Cookie由浏览器维护,保存在内存中,浏览器关闭后就消失了,其存在时间是短暂的。硬盘Cookie保存在硬盘里,有一个过期时间,除非用户手工清理或到了过期时间,硬盘Cookie不会被删除,其存在时间是长期的。所以,按存在时间,可分为非持久Cookie和持久Cookie

【详解分类】

会话cookie:用户使用本网站的持续时间仅持续一个会话 cookie 。通常一个Web浏览器退出时删除会话cookie。创建时没有有效过期时间指令时创建的Cookie是当一个会话cookie 

当退出关闭浏览器时在内存删除此cookie

持久性cookie:一个持久的cookie 将长于用户会话 。如果一个持久的cookie其最大年龄为1年,那么,在今年内,该cookie设置初始值将被发送回服务器每次用户访问该服务器 。这可能是用来记录的信息,如用户最初如何来到这个网站的重要一块 。出于这个原因,也被称为持久Cookie追踪cookies,当关闭浏览器=时,cookie被回写带磁盘做持久化存储。

默认存储在C:\Users\用户名\AppData\Roaming\Microsoft\Windows\Cookies文件夹中,你会发现一个index.dat的文件吗,这个文件应该将cookie文件对应到域的索引文件。

安全cookie:只用了一个安全的cookie是当浏览器访问通过服务器的 HTTPS,以确保该Cookie从客户端传输到服务器时,总是加密。这使得该cookie不太可能通过窃听被盗窃。

HttpOnlycookieHttpOnly cookie的支持大多数现代浏览器。[在支持的浏览器,HttpOnly会话cookie的将被用来只有当发送HTTP(或HTTPS)请求,从而限制从其他非HTTP API(如访问如JavaScript)。此限制可以减轻但并没有消除通过跨域盗取会话cookie的脚本攻击。 

第三方Cookie:第一方Cookie是在浏览器的地址栏(或它的子域)具有相同域设置的Cookie。第三方Cookie饼干比地址栏上(即在该域的网页功能从第三方域的内容显示一个不同的域 例如www.advexample.com运行显示广告横幅广告)。

例如:假设用户访问www.example1.com,这与域设置了一个cookie ad.foxytracking.com。后来当用户访问www.example2.com,另一个cookie设置域ad.foxytracking.com。最终,这些cookies都将被发送到广告客户的时候加载自己的广告或访问他们的网站 。广告客户可以使用这些cookies,建立此广告客户上的脚印在所有的网站的用户浏览器的历史记录 。

Supercookie:一个“supercookie”是一个公共后缀域的cookie,像。 COM ,。 co.uk 或 k12.ca.us 

大多数浏览器默认情况下,允许第一方Cookies设置相同域或子域的cookie 。例如,一个用户访问www.example.com可以设置 www.example.comexample.com ,但不是COM。一个 COM 会被浏览器阻止,否则attacker.com一样,可以设置example.com

Zombie cookie

一个僵尸Zombie cookie是用户已删除的cookie但是可以自动重新创建的cookie。它通过脚本存储在本地其他位置cookie的内容,如在本地存储的Flash内容,HTML5的存储和其他客户端存储的机制,当检测到cookie被删除时,重新创建cookie检测到Cookie

【用途】

因为HTTP协议是无状态的,即服务器不知道用户上一次做了什么,这严重阻碍了交互式Web应用程序的实现。在典型的网上购物场景中,用户浏览了几个页面,买了一盒饼干和两瓶饮料。最后结帐时,由于HTTP的无状态性,不通过额外的手段,服务器并不知道用户到底买了什么。

所以Cookie就是用来绕开HTTP的无状态性的额外手段之一。服务器可以设置或读取Cookies中包含信息,借此维护用户跟服务器会话中的状态。

在刚才的购物场景中,当用户选购了第一项商品,服务器在向用户发送网页的同时,还发送了一段Cookie,记录着那项商品的信息。当用户访问另一个页面,浏览器会把Cookie发送给服务器,于是服务器知道他之前选购了什么。用户继续选购饮料,服务器就在原来那段Cookie里追加新的商品信息。结帐时,服务器读取发送来的Cookie就行了。

Cookie另一个典型的应用是当登录一个网站时,网站往往会请求用户输入用户名和密码,并且用户可以勾选下次自动登录。如果勾选了,那么下次访问同一网站时,用户会发现没输入用户名和密码就已经登录了。这正是因为前一次登陆时,服务器发送了包含登录凭据(用户名加密码的某种加密形式)的Cookie到用户的硬盘上。第二次登录时,(如果该Cookie尚未到期)浏览器会发送该Cookie,服务器验证凭据,于是不必输入用户名和密码就让用户登录了。

【HTTP请求与响应中的cookie交互

第一次请求一个站点


由于第一次请求,本地没有存储这个网站的cookie,所以http request中不包含cookies,服务端响应http response设置网站的cookie已记录一些信息如图1.


浏览器收到cookie 如图2.

再次请求相同站点


点击看cookie的交互


cookie属性】

Set-Cookie $key=$value; [expires=Tue, 11-Oct-2011 13:59:34 GMT;] [path=/;] [domain=.weibo.com;]  [secure;] [httponly;]

 <?php
      2         ob_start();
      3         session_start();
      4         $_SESSION['t']='t';
      5         $sid=session_id();
      6         var_dump($_SESSION);
      7         var_dump($_COOKIE);
      8         header('Set-Cookie:PHPSESSID=13; path=/; domain=imzong.com; httponly',true);
      9         $value = 'something from somewhere';
     10         setcookie("tmpCookie0", $value);
     11         setcookie("tmpCookie1", $value, time()+10000*3600);  /* expire in 1 hour */
     12         setcookie("tmpCookie2", $value, time()+10000*3600, "/files");
     13         setcookie("tmpCookie3", $value, time()+10000*3600, "/", ".imzong.com", 0,0);
     14         setcookie("tmpCookie4", $value, time()+10000*3600, "/", ".weibo.com", 0,0);
     15         setcookie("tmpCookie5", $value, time()+10000*3600, "/", ".imzong.com", 1,0);
     16         setcookie("tmpCookie6", $value, time()+10000*3600, "/", ".imzong.com", 0,1);
     17         setcookie("tmpCookie7", $value, time()+10000*3600, "/", ".imzong.com", 1,1);
     18         ob_end_flush();
     19 ?>
     20 <script language='javascript'>
     21         ajax=new XMLHttpRequest()
     22         ajax.open("GET","http://data.auto.sina.com.cn/test.php",true);
     23         ajax.send();
     24 </script>
     25 <iframe src='http://data.auto.sina.com.cn/test.php'></iframe>
     26 
     27 <script>
     28 alert(document.cookie);
     29 </script>


变量名和值是必须得其他过期时间,目录,域,安全连接传输,httponly都是可选的

Set-Cookie PHPSESSID=13; path=/; domain=imzong.com; httponly

Set-Cookie tmpCookie0=something+from+somewhere

没有效时间浏览器关闭时,这些cookie即将失效

只有keyvalue

Set-Cookie tmpCookie1=something+from+somewhere; expires=Tue, 11-Oct-2011 13:59:34 GMT

Set-Cookie tmpCookie2=something+from+somewhere; expires=Tue, 11-Oct-2011 13:59:34 GMT; path=/files

有效时间内,只有在访问current.domain.com/files时才会有效

Set-Cookie tmpCookie3=something+from+somewhere; expires=Tue, 11-Oct-2011 13:59:34 GMT; path=/; domain=.imzong.com

有效时间内,只要是访问*.imzong.com/*就会有效

Set-Cookie tmpCookie4=something+from+somewhere; expires=Tue, 11-Oct-2011 13:59:34 GMT; path=/; domain=.weibo.com

由于是imzong.com设置的cookie,这个cookie不会有任何作用,不仅不再weibo.com有效并且不会回传到imzong.com

Set-Cookie tmpCookie5=something+from+somewhere; expires=Tue, 11-Oct-2011 13:59:34 GMT; path=/; domain=.imzong.com; secure

只有在安全连接时才会回传这个cookie 

Set-Cookie tmpCookie6=something+from+somewhere; expires=Tue, 11-Oct-2011 13:59:34 GMT; path=/; domain=.imzong.com;  httponly

只能在http请求中访问此cookie其他js脚本不能访问

下边看一下再次访问此页面


只有tmpCookie0,tmpCookie1,tmpCookie3,tmpCookie6,PHPSESSID又回传给服务器,由于并没有关闭浏览器所以session为期限的cookie也被会传回去了,

接着访问imzong.com/files


只有tmpCookie2,tmpCookie3,tmpCookie6,PHPSESSID又回传给服务器,这次只有tmpCookie0,tmpCookie1没有回传因为目录不对,

接着访问weibo.com


那个tmpcookie4是没有发送的,可见我们是不能这样设置的呵呵。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值