1、Cookie
创建
Cookie cookie = new Cookie(cookieName, cookieValue);
保存
cookie.setMaxAge(10 * 60);设置cookie 在客户端的持久化时间,以秒为单位,设置为保存10分钟,过期浏览器自动删除该cookie信息。
删除
如果想删除客户端已经存储的Cookie信息,就是将持久化时间设置为0。
2、Session
创建
第一次执行request.getSession()时创建。
获取对象
- 两个get方法:
- request.getSession(false):得到session对象。原来有Session就直接返回,没有返回null
- request.getSession(true):创建或得到session对象。原来有Session就直接返回,没有Session自动创建新的session对象。
- request.getSession();不加参数默认就是true。
销毁
- session过期/失效(默认30分钟)
- void setMaxInactiveInterval(int interval) : 设置session的有效时间
- 手动销毁session(注销或者退出)
- session.incalidate()
session对象销毁时间:
- 1、默认情况30分钟服务器自动回收
- 2、修改session回收时间
- 3、全局修改session有效时间
服务器关闭时,session销毁了吗?
当服务器关闭时,存放在客户端浏览器中的sessionid(即某session的唯一标识符)被销毁,但是存放在服务器中的sessionid没有被销毁。
3、对比
- 数据存储地点:
- Cookie数据存储在客户端本地,减少服务器端的存储的压力,安全性不好,客户端可以清除cookie
- Session将数据存储到服务器端,安全性相对好,增加服务器的压力
- 存储信息:
- Cookie只能存储字符串类型,不能保存对象,不能存中文
- Session可以保存对象,可以存中文
- 存储大小
- Cookie存储量有限
- Session可以无限量存储多个变量
- 安全性:
- Cookie安全性不好
- Session安全性相对好
4、关于Session的一点补充
- 当在同一个浏览器中同时打开多个标签,发送同一个请求或不同的请求,仍是同一个session;
- 当不在同一个窗口中打开相同的浏览器时,发送请求,仍是同一个session;
- 当使用不同的浏览器时,发送请求,即使发送相同的请求,是不同的session;
- 当把当前某个浏览器的窗口全关闭,再打开,发起相同的请求时,是不同的session。