定义:在连接之间存储持久的客户端状态的小文本串
只能是非空白符的ASCII文本,不能包含逗号或分号
cookie在请求和响应的HTTP首部,从服务器传递到客户端,再从客户端传回到服务器
cookie值通常不包含数据,只是指示服务器上的数据
cookie作用域
默认作用域是最初的URL所指向的服务器和所有子域及所有子目录
可通过多个属性控制其作用域(过期日期,路径,端口,版本,安全选项)
Domain 可指示一个cookie应用于整个子域,而不只是最初的服务器
如Set-cookie:user=elharo;Domain=foo.example.com
Path 路径限制
如Set-cookie:user=elharo;path=/restricted
请求相同服务器子树/restricted中的一个文档时,客户端会回显此cookie
cookie也可同时包括域和路径
如Set-cookie:user=elharo;Domain=foo.example.com;path=/restricted
不同cookie属性的顺序无关紧要,只需用;隔开,但客户端发送回服务器时,路径必须在域前面
expires 格式:Wdy,DD-Mon-YYYY HH:MM:SS GMT
设置cookie在这个时间点过期
Max-Age 可设置cookie经过一定秒数过期
secure 无值的安全属性
cookie可能包含敏感信息,如口令和会话密钥,所以一些cookie应当是安全的
httponly 告诉浏览器只能通过HTTP和HTTPS返回cookie
特别强调不能由javascript返回,为针对cookie窃取提高安全性
CookieManager
java.net.CookieHandler 定义了存储和获取cookie的API
CookieManager manager=new CookieManager();
cookieHandler.serDefault(manager);
即可实现从网站接收cookie,再把它们发回给这些网站,Java会存储这些服务器发送的所有cookie
对于接收哪里发送的cookie:
CookiePolicy.ACCEPT_ALL 接受所有cookie
CookiePolicy.ACCEPT_NONE 不接受任何cookie
CookiePolicy.ACCEPT_ORIGINAL_SERVER 只接受第一方cookie
需在保存cookie数据之前设置:(有待验证)
manager.setCookiePolicy(cookiePolicy.xxxx);
更细粒度控制可实现cookiePolicy接口,覆盖shouldAccept()方法
CookieStore
有时需在本地存放和获取cookie
CookieStore store=manager.getCookieStore();
允许增加、删除和列出cookie
此库中的cookie都封装在一个HttpCookie对象中