一、使用注意事项
①Cookie是由http协议制定,javaee,android,php,.net,ios等
②Cookie中的数据是有大小限制,不能存储大量数据。4kb。③一个浏览器存储的cookie也是有上限。300个左右
④一个网站在浏览器上存储的cookie也是有上限。30个左右
⑤不同浏览器的cookie不同的。例如:火狐浏览器的cookie和IE浏览器的cookie相互独立。
⑥cookie中不能直接存储中文。
解决:URL编码,然后在浏览器端进行uri解码
Cookie不能存大量数据,不能向浏览器存储很多cookie
二、生命周期
Cookie在浏览器关闭后就被浏览器清空。如何让Cookie长久保存在浏览器端。延长生命周期。用setmaxage
Cookie生命周期:
默认会话范围
变为持久化(保存到硬盘上)
Cookie对象.setMaxAge(int second); 设置Cookie的生存时间。
参数:秒
-1 默认,会话范围
0 立刻使cookie过期。让浏览器立刻删除cookie
>0 持久化保存cookie。不会在乎浏览器关闭与否。
如果没有过期,还能正常使用
如果过期,浏览器不会传递过期的cookie。
三、cookie有效路径
问题:浏览器发送不同请求路径时,带来哪些cookie信息。
Cookie信息的保存路径是由浏览器决定的,不同的浏览器时有不同的保存路径。不用开发人员操心。
Cookie对象.setPath(String path); 有效路径。
请求路径 等于或者包含 有效路径,这个Cookie就会被带入请求头
访问路径:
/web_1/hehe/
c1:/web_1/
c2:/web_1/hehe/
c3:/web_1/hehe/xixi/
分析:因为访问路径等于c2有效路径,c2能被带入请求头
因为访问路径包含c1有效路径,c1能被带入请求头
因为访问路径不等于、不包含c3有效路径,c3不带入请求头
注意:首先必须先运行定义cookie的sevlet,然后在进行路径的访问,不然只有c1能够创建成功
四、关于cookie的覆盖问题。
Cookie唯一标识相同,认定是一个cookie,新的值覆盖旧的值。
Cookie唯一标识不同,认定是两个没有任何关系cookie,分别保存。
Cookie唯一标识:域名 + 资源路径 + cookie名字
Cookie有效路径:http://localhost:8080/web/a.html
域名:http://localhost:8080/
资源路径: /web/a.html
例1:
以下两个cookie是分别保存的,因为虽然域名相同、资源路径相同,但是cookie名字不同
Cookie1:有效路径:http://www.baidu.com/hehe/a.html c1
Cookie2:有效路径:http://www.baidu.com/hehe/a.html c2
例2:
以下两个cookie是分别保存的,因为虽然域名相同、cookie名字相同,但是资源路径不同
Cookie1:有效路径:http://www.baidu.com/hehe/a.html c1
Cookie2:有效路径:http://www.baidu.com/haha/a.html c1
例3:
以下两个cookie是分别保存的,因为虽然资源路径相同、cookie名字相同,但是域名不同
Cookie1:有效路径:http://www.baidu.com/hehe/a.html c1
Cookie2:有效路径:http://www.itheima.cn/hehe/a.html c1
例4:
相互覆盖,因为域名、资源路径、cookie名 ,唯一标识都是相同的,所以判定为一个cookie。
Cookie1:有效路径:http://www.baidu.com/hehe/a.html c1
Cookie2:有效路径:http://www.baidu.com /hehe/a.html c1