目录
前言
用户通过浏览器访问Web应用时,服务器需要对用户的状态进行跟踪。例如,用户登陆时自动填充账号密码。在视频网站点击我的收藏时,跳转到一个新的页面,需要根据用户的身份找到用户收藏的视频。在Web开发中,服务器跟踪用户信息的技术称为会话技术。
由于HTTP是无状态请求,即每一次请求都是独立的请求,不能保存记录信息因此Cookie和Session应运而生。
1.什么是Cookie
去商场购物时,商场经常会赠送给顾客一个购物卡。顾客再去该商场购物时,会带上购物卡。购物卡上会有顾客的消费次数和消费额度等信息,商场根据顾客的消费情况给予该顾客优惠。
在Web开发中,cookie就相当于会员卡。用户通过浏览器访问Web应用时,服务器会将一些信息放在Cookie中并发送给客户端。当用户通过该浏览器再次访问服务器时,服务器端会根据Cookie中的信息做出正确响应。
2.Cookie API
Cookie常用方法
列举几个常用的方法
(1)public void setMaxAge(int expiry);getMaxAge();
setMaxAge(int expiry)和getMaxAge()方法分别用于于设置和返回Cookie在浏览器上保持的有效秒数。
若设置为一个正整数则浏览器会将Cookie保存在本地硬盘中,从当前时间开始到设置的指定秒数Cookie都会存活。并且同一台计算机上运行的该浏览器都可以使用该Cookie信息。
若设置为一个负整数,Cookie信息会被保存在该浏览器的缓存中。浏览器关闭,Cookie信息删除。
若设置为0,则浏览器会立即删除这个Cookie信息。
(2)public void setPath(String uri);
假设tomcat/webapp下有两个应用webapp_a和webapp_b。
若webapp_a下创建了一个Cookie,默认情况下该Cookie只能在webapp_a下使用。
- 设置为cookie.setPath("/") ---------------整个webapp文件夹下的所有应用均可使用。
- 设置为cookie.setPath("/webapp_b/") ---------------仅在webapp_b文件夹下可使用。
- 设置为cookie.setPath("/webapp_b/jsp") ---------------仅在webapp_b/jsp文件下可使用。
(3)public void setDomain(String pattern);
public void setDomain(String pattern)针对Cookie的domain属性。
一般的场景是通过在父级域设置Cookie,然后在各个子级域拿到存在父级域中的Cookie值。
如域A为t1.test.com,域B为t2.test.com,那么在域A生产一个令域A和域B都能访问的cookie就要将该cookie的domain设置为.test.com;如果要在域A生产一个令域A不能访问而域B能访问的cookie就要将该cookie的domain设置为t2.test.com。
总结
下篇总结一下Session