Cookie、Session
Cookie
将一些重要的数据 通过Cookie技术 保存在客户端
cookie 的出现是因为 HTTP 是无状态的一种协议,换句话说,服务器记不住你,可能你每刷新一次网页,就要重新输入一次账号密码进行登录。这显然是让人无法接受的,cookie 的作用就好比服务器给你贴个标签,然后你每次向服务器再发请求时,服务器就能够 cookie 认出你。
Cookie 的基本使用
- cookie:客户端会话技术,将数据保存到客户端,每次请求都携带Cookie数据进行访问
1、创建Cookie对象,设置数据
Cookie cookie = new Cookie("key","value");
2、发送Cookie给客户端,使用response对象
response.addCookie(cookie);
3、获取客户端写嗲的所有Cookie,使用request对象
Cookie[] cookie = request.getCookies();
4、遍历数组,获取每一个Cookie对象:for
5、使用Cookie对象方法获取数据
cookie.getName();
cookie.getValue();
Cookie 原理
Cookie的实现是基于HTTP协议的
- 响应头:set-cookie
- 请求头:cookie
Cookie 使用细节
- Cookie 存活时间
- 默认情况,Cookie存储在浏览器内存中,浏览器关闭,则Cookie销毁
setMaxAge(int seconds):设置Cookie存活时间
- 正数:将cookie写入浏览器所在电脑硬盘中,持久化存储,到时间自动销毁
- 负数:默认值,Cookie在浏览器中,当浏览器关闭,Cookie被销毁
- 零:删除对应Cookie
- Cookie 存储中文
- Cookie不能直接存储中文
- 如需存储,则需要进行转码:URL编码
Session
session 是一个数据结构,由网站的开发者设计,所以可以承载各种数据,只要客户端的 cookie 传来一个唯一的 session ID,服务器就可以找到对应的 session,认出这个客户。
当然,由于 session 存储在服务器中,肯定会消耗服务器的资源,所以 session 一般都会有一个过期时间,服务器一般会定期检查并删除过期的 session,如果后来该用户再次访问服务器,可能就会面临重新登录等等措施,然后服务器新建一个 session,将 session ID 通过 cookie 的形式传送给客户端。
Session 基本使用
服务会话跟踪技术 将数据保存到服务器
Java EE 提供HTTP Session
接口 来实现一次会话的多次请求间数据共享功能
1、获取Session对象
HttpSession session = request.getSession();
2、Session对象功能
void setAttribute(String name,Object o):存储数据到session域中
Object getAttribute(String name):根据key,获取值
void removeAttribute(String name):根据key,删除改键值对
Session 原理
Session是基于Cookie实现的 同一个会话之间 获取的Session 是同一个
Session 使用细节
Session 钝化、活化:
- 服务器重启后,Session中的数据是否还在
- 钝化:在服务器正常关闭后,Tomcat会自动将Session写入硬盘中
- 活化:再次启动服务器后,从文件加载数据到Session中
Session销毁:
- 默认情况下,无操作,30分钟后自动销毁
<session-config> <session-timeout>30</session-timeout> </session-config>
- 调用Session对象的
invalidate()
方法
Cookie和Session的区别
- Cookie和Session都是来完成一次会话内多次请求间数据共享的
- 区别:
- 存储位置:Cookie是将数据存储在客户端,Session将数据存储在服务端
- 安全性:Cookie不安全,Session安全
- 数据大小:Cookie最大3KB,Session无大小限制
- 存储时间:Cookie可以长期存储,Session默认30分钟
- 服务器性能:Cookie不占服务器资源,Session占用服务器资源