一、什么是session
1、session在网络应用中,称为“会话控制”
2、表示一次会话(浏览器打开到浏览器关闭)。Session存储在服务器的内存中。
3、为什么有Session
(1)、解决HttpServlet协议的无状态
(2)、存储系统信息(为了程序提高用户体验性)
4、重点(应用)
1、获取Session对象
HttpSession session = request对象.getSession();
2、设置Session的值
session对象.setAttribute("名",值);
3、读取Session的值
Session对象.getAttribute("名");
4、移除Session的属性值
Session对象.removeAttribute("名");
5、设置过期时间
session对象.setMaxInactiveInterval(秒)
6、session失效
session对象.invalidate();
(1)、创建Session01 ,重定向到Session02
package com.lihaozhe.servlet.session; /**
* @author 司培亮
* @version 1.0.0 2022/6/15 上午9:27
*/
import jakarta.servlet.*;
import jakarta.servlet.http.*;
import jakarta.servlet.annotation.*;
import java.io.IOException;
@WebServlet(name = "Session01", value = "/Session01")
public class Session01 extends HttpServlet {
private static final long serialVersionUID = -6360411000776643598L;
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("我是session01");
//获取httpsession对象
HttpSession session = request.getSession();
//向session域存储 向session绑定
session.setAttribute("slogan","桃李不言下自成蹊");
System.out.println("session01 sessionID" + session.getId());
response.sendRedirect(request.getContextPath()+"/Session02");
}
}
(2)、创建Session02
package com.lihaozhe.servlet.session; /**
* @author 司培亮
* @version 1.0.0 2022/6/15 上午9:27
*/
import jakarta.servlet.*;
import jakarta.servlet.http.*;
import jakarta.servlet.annotation.*;
import java.io.IOException;
@WebServlet(name = "Session02", value = "/Session02")
public class Session02 extends HttpServlet {
private static final long serialVersionUID = -8078758013937781831L;
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("我是sessiont02");
HttpSession session = request.getSession();
String solgan = (String)session.getAttribute("solgan");
System.out.println("slogan>>>>"+solgan);
System.out.println("session02 sessionID" + session.getId());
}
}
(3)、创建Session03
package com.lihaozhe.servlet.session; /**
* @author 司培亮
* @version 1.0.0 2022/6/15 上午9:27
*/
import jakarta.servlet.*;
import jakarta.servlet.http.*;
import jakarta.servlet.annotation.*;
import java.io.IOException;
@WebServlet(name = "Session03", value = "/Session03")
public class Session03 extends HttpServlet {
private static final long serialVersionUID = 5794916372014247823L;
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("我是sessiont03");
HttpSession session = request.getSession();
String solgan = (String)session.getAttribute("solgan");
System.out.println("slogan>>>>"+solgan);
System.out.println("session03 sessionID" + session.getId());
}
}
(4)、打开服务器,在浏览器中访问session03,服务器的控制台输出的session01的slogan是null
我是sessiont03
slogan>>>>null
然后再用浏览器访问session01,就会跳转到session02,服务器控制台输出如下:
我是session01
我是sessiont02
slogan>>>>桃李不言下自成蹊
这时再访问session03,输出的结果与session02一致
我是sessiont03
slogan>>>>桃李不言下自成蹊
这是因为先访问的session03与未访问的session01不在一个会话中,之后访问了session01,这时session01与session03在同一个会话中。
(5)、关闭浏览器就相当与结束了这段会话,在访问session03输出的值仍是null。
5、session的特点 :session无法删除
二、什么是cookie
1、一般由服务器端进行创建,保存在客户端(内存|硬盘——物理文件) 2、为什么有Cookie (1)、解决Http协议的无状态 http协议:请求响应 建立TCP连接 发送请求 服务器响应 断开连接 (2)、存储系统信息(为了程序提高用户体验性) 3、为什么有的Cookie浏览器重新打开后就消失了? Cookie可以分为:内存中的Cookie和文件中的Cookie 缺点 (1)、安全性较低 (2)、可以被禁用 4、重点(应用) (1)、Cookie的创建及读取 (2)、设置过期时间及访问路径
5、在浏览器中写入cookie
package com.lihaozhe.servlet.cookie; /**
* @author 司培亮
* @version 1.0.0 2022/6/15 上午9:46
*/
import jakarta.servlet.*;
import jakarta.servlet.http.*;
import jakarta.servlet.annotation.*;
import java.io.IOException;
import java.net.URLEncoder;
@WebServlet(name = "WriteCookie", value = "/WriteCookie")
public class WriteCookie extends HttpServlet {
private static final long serialVersionUID = 4525057663530795312L;
//这个是存储cookie
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//Cookie为key-value结构
//cookie一般由服务器创建,存储在客户端
//1、、服务器创建cookie
Cookie c1 = new Cookie("c1","phoenix");
Cookie c2 = new Cookie("c2", "lihaozhe");
// URLEncode和URLDecode用于完成普通字符串和 application/x-www-from-urlencoded
// MIME字符串之间的相互转化
// 如果传递的字符串中包含非西欧字符的字符串,会被转化成%XX%XX XX为十六进制的数
Cookie author = new Cookie("author", URLEncoder.encode("李昊哲", "utf-8"));
Cookie slogan = new Cookie("slogan", URLEncoder.encode("桃李不言下自成蹊", "utf-8"));
//2、设置cookie过期时间,单位秒
c2.setMaxAge(60);
author.setMaxAge(60 * 60 * 24 * 7);
slogan.setMaxAge(60 * 60 * 24 * 7);
//设置访问路径,客户端是否可以操作cookie
c2.setHttpOnly(true);
//将cookie保存在客户端
response.addCookie(c1);
response.addCookie(c2);
response.addCookie(author);
response.addCookie(slogan);
}
}
6、读取cookie
package com.lihaozhe.servlet.cookie; /**
* @author 司培亮
* @version 1.0.0 2022/6/15 上午11:36
*/
import jakarta.servlet.*;
import jakarta.servlet.http.*;
import jakarta.servlet.annotation.*;
import java.io.IOException;
import java.net.URLDecoder;
@WebServlet(name = "ReaderCookie", value = "/ReaderCookie")
public class ReaderCookie extends HttpServlet {
private static final long serialVersionUID = 6945492819977172654L;
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
Cookie[] cookies = request.getCookies();
for (Cookie cookie : cookies) {
if ("author".equalsIgnoreCase(cookie.getName()) || "slogan".equalsIgnoreCase(cookie.getName())) {
System.out.println(cookie.getName() + " >>> " + URLDecoder.decode(cookie.getValue(), "utf-8"));
} else {
System.out.println(cookie.getName() + " >>> " + cookie.getValue());
}
}
}
}