会话跟踪
# 会话跟踪
会话跟踪是Web程序中常用的技术,用来跟踪用户的整个会话。保持对用户会话期间的数据管理。常用的会话跟踪技术是Cookie与Session。
Cookie 通过在 客户端记录 信息确定用户身份 Session 通过在 服务器端记录 信息确定用户身份
# Cookie
Cookie是客户端请求服务器后,服务器发给客户端的⼀个辨认标识,保存在客户端,当客户端再次向服务器发送请求时,会携带着这个辨认标识,服务器就可以通过这个标识来识别 客户端的身份 或 状态等...
# Cookie应用
应用步骤:
- 存数据 实例
Cookie对象
(String key, String value) - 响应返回
HttpServletResponse.addCookie(Cookie cookie)方法
对指定的cookie对象
进行添加至响应中(可多次添加数据) - 客户端识别读取 ,
HttpServletRequest.getCookies()
获取 得到Cookies对象数组
- 对其数组进行遍历
cookie对象
,Cookie.getName()方法
判断对应 保存的key 进行获取 value值 - 符合条件的 key 对其值进行 范围保存value值
Cookie保存
@Override
protected void doPost(HttpServletRequest req , HttpServletResponse resp) throws ServletException, IOException {
System.out.println("Post请求============");
String user = req.getParameter("user");
//创建保存 cookie对象
Cookie cookie = new Cookie("uname",user);
//添加对象
resp.addCookie(cookie);
}
Cookie读取
// 方式No.1
<%
Cookie[] cookies = request.getCookies();
if (cookies != null) {
for (Cookie c : cookies) {
if (c.getName().equals("uname")) {
pageContext.setAttribute("uname",c.getValue());
break;
}
}
}
%>
// 方式No.2
${cookie.<键名>.vlaue}
Cookie定时销毁
Cookie cookie = new Cookie("username", "aaa");
//设置Cookie的有效时间为30s
cookie.setMaxAge(30);
response.addCookie(cookie);
Cookie中文编码
// 存数据前 将String 转换 编码
String name = URLEncoder.encode("张三", "utf-8");
Cookie cookie = new Cookie("name", name);
// 取数据前 将String 反转 编码
String name = URLDecoder.decode( cookie.getName() ,"utf-8");
点击Cookie更多方法 (opens new window) 点击了解HttpServletResponse (opens new window)
注意:
- 未对Cookie有效时长设置 ,则Cookie在浏览器关闭自动销毁
- Cookie数据 会保存在当前的客户端
- Cookie不适保存隐私信息
# Session
Session是客户端浏览器访问服务器的时候,服务器把客户端信息以某种形式记录在服务器上的数据
Session对象 对应的类为 javax.servlet.http.HttpSession类
# Session应用
应用步骤:
- 获取HttpSession对象,通过
HttpServletRequest.getSession()方法
获取对象- 保存对象属性,通过
HttpSession.setAttribute(String key , String value)方法
存储数据- 读取数据,通过
HttpSession.getAttribute(String key)方法
获取数据
点击更多HttpSession方法 (opens new window) 点击更多HttpServletRequest方法 (opens new window)
# Session生命周期
Session保存在服务器端 Session在用户第⼀次访问服务器的时候自动创建。需要注意只有访问JSP、Servlet等程序时才会创建 Session对象,只访问HTML、IMAGE等静态资源并不会创建Session
点击了解Session生命周期 (opens new window)
Session销毁操作有哪些?
- 关闭服务器
- session对象调用 invalidate()
- session对象设置了自动销毁时间 session.setMaxInactiveInterval(60) (60s销毁)
- session默认30min自动销毁(从你上一次访问服务器开始计时开始
注意:
- Session对象 重定向/转发时,session数据不会丢失 (重定向请求数据会丢失)
- Session 用于存储有意义的数据(减少服务器压力)
- Session 有生命周期时长的限制(默认30min失效
# Session和Cookie的区别
- Cookie数据保存在客户端
- Cookies不会占服务器资源
- Session数据保存在服务器端
- Session的客户端SessionID标识符,用存服务端的Session存储空间
上次更新: 2023/03/12, 00:43:49