会话技术
在日常生活中,拨通电话到挂断电话之间的你问我答的过程就是会话
在浏览器和Web服务器之间连续发生的请求-响应过程就是会话
直到一方断开,会话结束
Http是一个无状态协议,不会记录每次请求的状态,这就造成了同一个会话的两请求之间相互独立,彼此没有联系,以后解决引出以下知识Cookie和Session
Cookie客户端(浏览器)会话跟踪技术
创建一个 Cookie,即由 Servlet 发送到 Web 浏览器的少量信息,由浏览器保存,然后发送回服务器。Cookie 的值可以唯一地标识客户端,因此 Cookie 通常用于会话管理。(翻译官方介绍)
Cookie基本使用
将数据保存到客户端,以后每次请求都携带Cookie数据进行访问
发送Cookie:
①创建Cookie对象,设置数据
Cookie cookie = new Cookie("key","value");
②发送Cookie到客户端:使用response对象
response.addCookie(cookie);
获取Cookie:
③获取客户端携带的所有Cookie,使用request对象
Cookie[] cookies = request.getCookies();
④遍历Cookie数组,获取对象(for)
⑤使用Cookie对象方法获取数据
cookie.getName(); cookie.getValue();
Cookie原理
基于HTTP协议:响应头set-cookie 请求头cookie
Cookie使用细节
存活时间:
默认情况下,Cookie存储在浏览器内存中,当关闭浏览器,内存释放,Cookie被销毁
setMaxAge(int seconds) 设置Cookie存活时间
1.正数:将Cookie写入浏览器所在电脑的硬盘,持久化存储,到时自动删除
2.负数:默认值,Cookie在挡墙浏览器内存中,当浏览器关闭,则Cookie被销毁
3.零: 立即删除对应的Cookie
存储中文:
不能之间存储中文,转UTF-8
request.setCharacterEncoding("UTF-8");
Session服务端(服务器)会话跟踪技术
会话对象是用于生成和使用消息的单线程上下文。虽然它可以在Java虚拟机(JVM)之外分配提供程序资源,但它被认为是一个轻量级JMS对象。(翻译官方介绍)
Session使用
将数据保存到服务器,HttpSession接口,实现多次请求数据共享功能
①获取Session对象
HttpSession session = request.getSession();
②Session对象功能
void setAttribute(String name,Object obj) 存储数据到session域中
Object getAttribute(String name) 根据key,获取值
void removeAttribute(String name) 根据key,删除该键值对
Session原理
基于Cookie实现的
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最大3KB, Session无大小限制
存储时间:Cookie可以长期存储, Session默认30分钟
服务器性能:Cookie不占服务器资源, Session占用服务器资源