JavaWeb-会话技术
<1> Cookie—客户端会话技术
(1) 获取 Cookie
注: 只能获取到一次会话的 Cookie , 储存在客户端上
Cookie c = new Cookie("msg","hello"); // 1.创建Cookie对象
response.addCookie(c); // 2.发送Cookie
====================以下是另一个类(运行的时候运行下面这个)=========================
ookie[] cs = request.getCookies(); //3.获取Cookie
// 4.遍历Cookie ↓
if(cs!=null){
for(Cookie c:cs){
String name=c.getName();
String value=c.getValue();
System.out.println(name+":"+value);
}
}
(2) Cookie 的特点
① 可同时创建多个 Cookie 对象, 也可多次发送
② Cookie 在访问后会停留并积累在最新的页面中, 类似于历史记录
③ Cookie 的寿命: 默认在浏览器关闭时销毁, 但可通过 setMaxAge持久化储存:
c.setMaxAge(30); /储存Cookie 30s 后删除
值为正数:经过数值秒后删除cookie
值为负数:默认值,关闭浏览器时删除
值为0:直接删除
④ Cookie 的共享
同一服务器使用 setPath(String path) 设置 path 为 "/" , 可共享 Cookie
不同服务器使用 setDomain(String path) 设置一级域名相同, 可共享 Cookie
⑤ cookie 存储数据在客户端浏览器上, 存储用户信息, 用于服务器在不登录下对用户进行简要身份识别
⑥ cookie 中的特殊字符要转化成URL编码, 使用 URLEecoder
和 URLDecoder
<2> Session—服务器端会话技术
(1) 共享和获取 Session
Session: 在一次会话的多次请求间多次共享数据, 并将数据保存在服务器端
只有同一个 Session 才可以互相共享数据
Session 可以存储任意类型, 任意大小的数据, 且安全性较 Cookie 高.
/共享 Session
HttpSession session = request.getSession();
session.setAttribute("msg","hello session");
====================以下是另一个类(运行的时候运行下面这个)=========================
/获取 Session
HttpSession session = request.getSession();
Object msg=session.getAttribute("msg");
System.out.println(msg);
(2) 希望客户端关闭后, session 也能相同
当客户端 (浏览器) 关闭后, 服务器不关闭, 前后两次获取的 Session 不是同一个;
但若需要二者相同, 需要创建 Cookie, 键为 JSESSIONID, 设置最大存活时间, 让 cookie 持久化保存.
注: Session 的实现依赖于 Cookie
HttpSession session = request.getSession();
System.out.println(session);
//客户端关闭后, session也能相同
Cookie c=new Cookie("JSESSIONID",session.getId());
c.setMaxAge(60*60);
response.addCookie(c);
(3) 希望服务器关闭后, 客户端不关闭, session 也能相同
服务器关闭前后, 获取到的 Session 不是同一个;
但若需要相同, 可以使用 Tomcat 自带的 Session 钝化和活化功能, 将 Session 写入文件后再读取到内存.
注意: 此方法不能使用 IDEA 运行, 需要手动运行 Tomcat !
在正常关闭时, Tomcat 会将 Session 自动存储在 work 文件夹中对应项目路径下的 ser 文件中, 再次打开时会自动恢复
(4) Session 的失效时间
① 关闭服务器
② 调用自我销毁方法: invalidate()
③ 一定时间后自动失效 (默认30分钟)