cookie和session
cookie
HTTP cookie 由服务端(产生方)发送到客户端(存储方),并存储在用户的客户端(浏览器)中.每次用户请求网站时,浏览器会将cookie发回给服务器.cookie可以用来记录一些状态信息(如购物车中的商品)或者记录用户的浏览行为
属性
| 属性 | 说明 | 
|---|---|
| name | cookie名 | 
| value | cookie值 | 
| domain | 哪个域名发送的,最长256字符 | 
| path | 哪个路径发送的 | 
| secure | 是否允许 | 
| httponly | 是否仅能通过http和https渠道暴漏.防止客户端js执行,盗取cookie | 
| max-age | 持续时间 | 
| expires | 过期时间,和上类似 | 
servlet-api 2.5之前版本(含)没有httpOnly这个字段,需要费点劲来设置httpOnly cookie.setPath(isHttpOnly ? "/pathxx; HttpOnly;": "/pathxx");

ps:
- 
    
对于一些静态资源的访问,如css,script等,发送cookie是没有意义的,所以一般静态资源会使用独立的域名,避免请求静态资源时发送cookie,减少cookie传输的次数. 例如去哪儿的静态资源使用的域名是qunarzz.com而不是qunar.com
 - 
    
chrome中的cookie,如果cookie不设置过期时间(
会话cookie,就是maxAge=-1),表示这个cookie的生命周期为浏览器会话时期,下图的过期时间那列Session就是这个意思 - 
    
没有了cookie,网站似乎都玩不转。亲测淘宝、qq邮箱、百度、去哪儿的网站。
 
比如禁止了cookie,在你登录时,百度会直接提示你

cookie实践
结合我的工作经历,我见过的cookie的使用方法:
- 
    
追踪用户行为,做trace使,在用户首次进入网站时,种下cookie。之后的请求在interceptor中拦截获取cookie打到日志mdc中。
 - 
    
做缓存的key,避免不必要的查库操作。比如退票时,分为退票申请、计算手续费、退票确认三步,但是用户的三次请求中订单信息等是不变的,可以只在退票申请时查db,然后写入缓存、并种下cookie;之后的计算手续费、退票确认都不需查db,直接从缓存中取即可。
 - 
    
登录 todo
 
session
session需要使用cookie作为识别标志。HTTP协议是无状态的,session不能依据HTTP连接来判断是否为同一客户,因此服务器向客户端浏览器发送一个名为JSESSIONID的cookie,其值为该session的ID。该cookie为服务器自动生成的,maxAge属性一般为-1,表示仅当前浏览器内有效,并且各浏览器窗口间不共享,关闭浏览器就会失效。因此同一机器的两个浏览器窗口访问服务器时会生成两个不同的session
cookie的java实现
//
// The value of the cookie itself.
//
private String name;	// NAME= ... "$Name" style is reserved
private String value;	// value of NAME
//
// Attributes encoded in the header's cookie fields.
//
private String comment;	// ;Comment=VALUE ... describes cookie's use
			// ;Discard ... implied by maxAge < 0
private String domain;	// ;Domain=VALUE ... domain that sees cookie
private int maxAge = -1;	// ;Max-Age=VALUE ... cookies auto-expire
private String path;	// ;Path=VALUE ... URLs that see the cookie
private boolean secure;	// ;Secure ... e.g. use SSL
private int version = 0;	// ;Version=1 ... means RFC 2109++ style
private boolean isHttpOnly = false;
参考:
[1]https://en.wikipedia.org/wiki/HTTP_cookie
[2]http://www.cnblogs.com/shiyangxt/archive/2008/10/07/1305506.html