会话技术
会话:一个会话中包含多次请求和响应。
一次会话:浏览器第一次给服务器资源发送请求、会话建立,直到一方断开为止。
功能:在一次会话的范围内的多次请求间,共享数据
方式:
- 客户端会话技术:Cookie,数据保存在客户端
- 服务器端会话技术:Session,数据保存在服务器
Cookie
快速入门
-
服务器(Servlet)创建cookie对象,绑定数据
new Cookie(String name, String value)
; -
服务器发送cookie对象(浏览器自动存储)
resp.addCookie(cookie)
-
浏览器第二次访问服务器时,服务器会获取cookie对象,拿到数据
Cookie[] req.getCookies()
。
cookie原理
cookie是存在请求头和响应头传递
cookie细节
- 一次 可不可以发送多个cookie?
- 可以,多创建几个cookie对象,添加就可以了。
- cookie在浏览器保存多长时间?
- 默认情况下,浏览器关闭,cookie被销毁。
- 持久化存储:
cookie.setMaxAge(正数)
存到硬盘xx秒;cookie.setMaxAge(负数)
默认值;cookie.setMaxAge(0)
删除cookie信息。
- cookie能不能存中文?
- 在tomcat 8之前,不可以存储中文。
- 在tomcat 8之后,可以存储中文,但是不支持特殊字符,需要URL编码:
- 编码
str = URLEncoder.encode(str, "utf-8");
- 解码
str = URLDecoder.decode(str, "utf-8");
- 编码
- cookie数据共享范围?
- 一个服务器,部署多个web项目之间,默认不能共享
- 默认是设置
cookie.setPath("/当前虚拟路径")
- 如果整个服务器 共享,可以设置为 :
cookie.setPath("/")
cookie特点
- cookie存储在客户端
- 单个cookie的大小限制在4kb,并且同一个域名下的总的cookie数量也有限制。
- cookie一般存储少量的不太敏感的数据
- 在不登录的情况下,完成服务器对客户端的身份识别。
Session
快速入门
-
存储session
HttpSession session = req.getSession(); session.setAttribute("msg", "hello");
-
获取session (另一个servlet文件)
HttpSession session = req.getSession(); Object msg = session.getAttribute("msg"); System.out.println(msg);
session原理
session依赖cookie:
- 第一次创建session对象时;
- 服务器会创建一个cookie,cookie指向session;(
JsessionID: xxx
) - 第二次访问时,服务器会根据cookie信息,查找到session对象。
session细节
-
当客户端关闭后,服务器不关闭,两次获取session是同一个吗?
-
默认不是,如果需要,创建cookie,设置最大存储时间:
HttpSession session = req.getSession(); Cookie c = new Cookie("JSESSIONID", session.getId()); c.setMaxAge(60*60); resp.addCookie(c);
-
-
当客户端不关闭,服务器关闭后,两次获取session是同一个吗?
- 不是,因为创建了两次对象,地址不一样,但是tomcat自动完成以下工作:
- session的钝化:在服务器关闭前,将session对象存储在硬盘上
- session的活化:在服务器启动后,将session文件转化为对象
- 不是,因为创建了两次对象,地址不一样,但是tomcat自动完成以下工作:
-
session什么时候被销毁?
- 服务器关闭
- session对象调用invalidate()
- session默认失效时间 30分钟
- 修改tomcat配置文件
tomcat/conf/web.xml
所有项目的父配置文件 - 修改
<session-timout>30</session-timeout>
- 也可以在项目的
web/WEB-INF/web.xml
修改
- 修改tomcat配置文件
session特点
session特点:
- 用于存储一次会话、多次请求的数据,存储在服务器
- 可以存储任意大小的数据
session与cookie区别
- session存储服务器端,cookie存储客户端
- session数据安全,cookie相对不安全
- session没有数据大小限制,cookie有数据大小限制