1,基础
1)Cookie在javax.servlet.http.Cookie下,一般由服务端来创建,用于在客户端保存数据。
2)正常的cookie只能由一个应用来使用,在同一tomcat服务器下(webapps中),共享cookie需要使用cookie.setPath("/")
//创建cookie,name, value
Cookie cookie = new Cookie("sessionId", UUID.randomUUID().toString().replace("-", ""));
cookie.setMaxAge(3600 * 24 * 7);//有效期,单位s
cookie.setHttpOnly(true);//cookie的安全策略,true则无法使用js获取cookie。eg:document.cookie将无法获取服务器端设置的cookie对象。
cookie.setPath("/");//用于同一服务器共享cookie。
cookie.setDomain(".oldqi.top");// 顶级域名中设置cookie,子域名下都可以获取cookie,不设置则使用当前域。
cookie.setComment("describe the usage of the cookie");
//domain和path据定了这些cookie可以被哪些页面共享。
response.addCookie(cookie);//将cookie写入响应体中。
3)浏览器收到设置cookie的response。(Set-cookie的响应头)
4)下次请求会将本域名下的cookie都以请求头header的形式传递过去。(从浏览器传到后台的只有cookie的name和value,所以使用cookie.getPath(),cookie.getDomain都为空
)
删除cookie时,cookie.setMaxAge(0); cookie.setDomain(domain);cookie.setPath(path);
都必须设置。
5)domian和path简介
请求urlhttp://local.api.com/api/server/add_test_cookie
- 不设置path,则默认会保存在/api/server下。
- 设置path为/,则在本域下的所有请求都会带着该cookie。
- 不能设置成其他path下的cookie,cookie.setPath("/api/v3"); 会将set-Cookie响应头返回,但是不能设置成功。
- 不能设置其他域下的cookie,可以设置成根域名,不设置默认为当前请求的domain。(cookie.setDomain("baidu.com"))
当访问一个uri,会将当前(/api/server/add_test_cookie),以及上层path(/api/server || /api), 本域名(local.api.com)以及根域名(.api.com)下的cookie都带过去。
2,cookie的模拟和修改
1)请求接口中增加cookie头,免登陆。
request.addHeader("Cookie", "sessionId=63ffb961-4f8e-47bc-a36f-ae40e4f4c5a1");
2)使用postman interceptor插件。(直接使用postman,chrome会限制不允许带cookie发出请求)
3)使用EditThisCookie插件,编辑cookie。
EditThisCookie是一个cookie管理器。您可以添加,删除,编辑,搜索,锁定和屏蔽cookies!
4)使用javascript前端控制台修改cookie。
document.cookie可以获取和设置多个cookie。
document.cookie="uname=hzq"
document.cookie="uname=hzq;domain=.duobeiyun.com;path=/"
3,cookie过大的问题
4,chrome console控制台
1)shift + enter可以进行多行js操作。
2)
5,其他
1)每个cookie size limit在4KB左右。(4000多个字节,每个domain下可以有多个cookie)
2)浏览器对cookie个数和大小的限制。
3)格式化显示压缩过的js和css