一、Cookie
- Cookie创建和发送
// 创建Cookie对象
Cookie cookie = new Cookie("user", "uname=zhangsan&upwd=123");
// 响应Cookie
resp.addCookie(cookie);
- Cookie的获取
Cookie[] cookies = req.getCookies();
// 判断数组是否为空
if (cookies != null && cookies.length > 0) {
// 遍历cookie数组
for (Cookie cookie : cookies) {
System.out.println("名称:" + cookie.getName() + ",值:" + cookie.getValue());
if("user".equals(cookie.getName())) {
System.out.println("Cookie:" + cookie.getValue());
}
System.out.println("解码:" + URLDecoder.decode(cookie.getValue()));
}
}
- Cookie 到期时间的设定
// 创建Cookie对象
Cookie cookie = new Cookie("uname", "zhangsan");
// 设置cookie的到期时间
// cookie.setMaxAge(-1); // 默认值,负整数表示在当前浏览器中存活,关闭浏览器即失效
// cookie.setMaxAge(20); // 正整数,表示cookie在浏览器中存活指定秒数,关闭浏览器也不影响
cookie.setMaxAge(0); // 零,表示即刻删除,浏览器中不保存
// 发送cookie
resp.addCookie(cookie);
- Cookie的路径
System.out.println("Cookie05...");
// 创建Cookie对象
Cookie cookie = new Cookie("uname2", "lisi");
// 设置cookie的路径 (/站点名/路径)
cookie.setPath("/sc04/test/ck05");
// 发送cookie
resp.addCookie(cookie);
// 创建Cookie对象
Cookie cookie2 = new Cookie("uname3", "wangwu");
// 设置cookie的路径
cookie2.setPath("/"); // 设置当前服务器下的所有路径都能访问到 定位到端口后面
// 发送cookie
resp.addCookie(cookie2);
二、Session
标识一次会话,或者说确认一个用户;并且在一次会话(一个用户的多次请求)期间共享数据。
- 创建获取Session
// 创建或获取Session对象
HttpSession session = req.getSession();
System.out.println(session);
// 获取会话的标识符
String id = session.getId();
System.out.println("标识符: " +id);
// 判断session是否是新建的 是=true
boolean flag = session.isNew();
System.out.println("是否是新的: " + flag);
// 获取第一次访问的时间
long createTime = session.getCreationTime();
System.out.println("获取第一次访问的时间: " + createTime);
// 获取最后一次访问时间
long lastAccessTime = session.getLastAccessedTime();
System.out.println("获取最后一次访问的时间: " + lastAccessTime);
- Session域对象
// 获取session对象
HttpSession session = req.getSession();
System.out.println("Session02: " + session.getId());
// 设置session域对象
session.setAttribute("uname", "zhangsan");
// 设置request域对象
req.setAttribute("uname", "lisi");
// 请求转发跳转 (request域对象和session域对象数据都可以获取到)
// req.getRequestDispatcher("se03").forward(req, resp);
// 重定向 (request域对象失效,session域对象可获取)
resp.sendRedirect("se03");
- 获取域对象
// 获取session对象
HttpSession session = req.getSession();
System.out.println("Session03: " + session.getId());
// 获取session域对象
String uname = (String) session.getAttribute("uname");
System.out.println("Session: " + uname);
// 获取request域对象
String uname2 = (String) req.getAttribute("uname");
System.out.println("Request: " + uname2);
4.Session的销毁
达到系统最大不活动时间(沉默时间)
默认30分钟,Tomcay服务器规定的。可以在服务器目录下的web.xml中修改最大不活动时间。
<session-config>
<session-timeout>30</session-timeout>
</session-config>
// 获取session对象
HttpSession session = req.getSession();
System.out.println(session.getId());
// 获取最大不活动时间
System.out.println(session.getMaxInactiveInterval()); // 默认1800
// 自己手动设置最大不活动时间 通过session.setMaxInactiveInterval(int);来设定 session 的最大不活动时间,单位为秒。
session.setMaxInactiveInterval(100);
// 手动销毁
// session.invalidate();