文章目录
一、会话跟踪技术基本概念
1-1、会话
用户打开浏览器,访问web服务器的资源,会话建立,直到有一方断开连接,会话结束。在一次会话中可以包含多次请求和响应
1-2、会话跟踪
一种维护浏览器状态的方法,服务器需要识别多次请求是否来自于同一浏览器,以便在同一次会话的多次请求间共享数据
1-3、数据共享
HTTP协议是无状态的,每次浏览器向服务器请求时,服务器都会将该请求视为新的请求,因此我们需要会话跟踪技术来实现会话内数据共享
1-4、实现方式:
1. 客户端会话跟踪技术:Cookie
2. 2.服务端会话跟踪技术:Session
二、Cookie 基本使用
2-1、概念
Cookie:客户端会话技术,将数据保存到客户端,以后每次请求都携带Cookie数据进行访问
2-2、Cookie 基本使用
-
发送cookie
//发送cookie //1.发送Cookie //1-1.创建Cookie对象,设置数据 Cookie cookie = new Cookie("name", "lee"); //1-2.发送Cookie到客户端:使用response对象 response.addCookie(cookie);
-
获取Cookie
//2.获取Cookie //2-1.获取Cookie 数组 Cookie[] cookies = request.getCookies(); //2-2.遍历,寻找特定的cookie对象 for (Cookie cookie:cookies) { String name = cookie.getName(); if (name.equals("name")) { String value = cookie.getValue(); System.out.println(value); } break; } }
三、Cookie 原理
3-1、Cookie的实现是基于HTTP协议的
- 响应头:set-cookie
- 请求头:cookie
四、Cookie 使用细节
4-1、Cookie 存活时间
- 默认情况下,Cookie 存储在浏览器内存中,当浏览器关闭,内存释放,则Cookie被销毁
- setMaxAge(int seconds):
- 1.设置Cookie存活时间正数:将 Cookie写入浏览器所在电脑的硬盘,持久化存储。到时间自动删除
- 2.负数:默认值,Cookie在当前浏览器内存中,当浏览器关闭,则Cookie被销毁
- 3零:删除对应 Cookie
亲测有效20秒之后果真没了cookie.setMaxAge(20);//亲测有效二十秒之后果真没了。
4-2、Cookie 存储中文
-
Cookie 有时候不能直接存储中文
-
如需要存储,则需要进行转码:URL编码
String encode = URLEncoder.encode(string, StandardCharsets.UTF_8);
String decode = URLDecoder.decode(encode, StandardCharsets.UTF_8);
五、Session 基本使用
- 服务端会话跟踪技术:将数据保存到服务端
- JavaEE 提供 HttpSession接口,来实现一次会话的多次请求间数据共享功能
- 使用:
//1.创建session对象 HttpSession session = request.getSession(); //2. session.setAttribute("name","lee"); ------------------------------------------- //3.获取session对象 HttpSession session = request.getSession(); Object name = session.getAttribute("name"); System.out.println(name+"在ServletSessionB");
六、Session 原理
- Session是基于Cookie实现的
Session是基于Cookie实现的,所有才能在一次会话中,不同Servlet实例的Session对象为同一个对象。
七、Session 使用细节
- session 钝化、活化:
服务器重启后,Session中的数据是否还在?
钝化:在服务器正常关闭后,Tomcat会自动将 Session数据写入硬盘的文件中
活化:再次启动服务器后,从文件中加载数据到Session中
+Seesion 销毁:- 在web.xml文件中配置存在时长
<session-config> <session-timeout> 100<!--单位是分钟--> </session-timeout> </session-config>
session.invalidate();//自我毁灭