1.服务器端会话跟踪技术:将数据保存在服务器端
底层基于cookie实现封装的
2.常用的API:
声明session:HttpSession session = req.getSession();
添加属性: session.setAttribute(k,v) session存入值 key=name,value '小明'
- /*
- * Copyright (c) 2020, 2023, All rights reserved.
- *
- */
- package cn.sessionTest;
-
- import jakarta.servlet.ServletException;
- import jakarta.servlet.annotation.WebServlet;
- import jakarta.servlet.http.*;
-
- import java.io.IOException;
- import java.io.PrintWriter;
-
- /**
- *
Project: scl-cookie - GetSessionA
- *
Powered by scl On 2023-09-04 20:08:20
- *
描述:
- *
- * @author 孙臣龙 [1846080280@qq.com]
- * @version 1.0
- * @since 17
- */
- @WebServlet("/getSessionA")
- public class GetSessionA extends HttpServlet {
- @Override
- protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
- HttpSession session = req.getSession();
- System.out.println(session.getId());
- session.setAttribute("name","scl");
- Cookie c = new Cookie("JSESSIONID",session.getId());
- c.setMaxAge(60*60); //1个小时有效期
- resp.addCookie(c);
- PrintWriter writer = resp.getWriter();
- writer.println("ok");
- writer.close();
- }
- }
获取session中的属性: Object session.getAttribute(k) 获取到session中的值
- /*
- * Copyright (c) 2020, 2023, All rights reserved.
- *
- */
- package cn.sessionTest;
-
- import jakarta.servlet.ServletException;
- import jakarta.servlet.annotation.WebServlet;
- import jakarta.servlet.http.*;
-
- import java.io.IOException;
- import java.io.PrintWriter;
-
- /**
- *
Project: scl-cookie - GetSessionB
- *
Powered by scl On 2023-09-04 20:11:25
- *
描述:
- *
- * @author 孙臣龙 [1846080280@qq.com]
- * @version 1.0
- * @since 17
- */
- @WebServlet("/getSessionB")
- public class GetSessionB extends HttpServlet {
- @Override
- protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
- HttpSession session = req.getSession();
- System.out.println(session.getId());
- String name =(String) session.getAttribute("name");
- PrintWriter writer = resp.getWriter();
- writer.println("sessionValue:"+name);
- writer.close();
-
-
- }
- }
清除session中的数据: removeAttribute(k) 删除我们的session中对应的key
清空session(对应的sessionid也会清除):session.invalidate();
1.当我们客户端发送请求达到服务器端时创建session,会得到一个sessionid,在将该
sessionid 响应在响应头
2.客户端(浏览器)接受响应头中的sessionid ,会将该sessionid的值 存放在浏览器中。
session本质上就是基于cookie实现封装的。
3.使用同一个浏览器发送请求时,访问通一个服务器端,会在请求头中设定该sessionid 的值,服务器端就会从请求头中获取到该sessionid 查找对应session。
session 数据存放在服务器端 cookie将数据存放在本地。
1.当客户端关闭后,服务器不关闭的话,获取到的session是否是同一个。因为客户端关闭后,cookie对象被销毁,客户端请求服务器会创建新的session。如果需要相同,可以设置cookie的最大存活时间,让cookie持久化保存两次获取Session是否为同一个
2.在默认情况下,不是同一个。如果需要两个Session相同,则可以创建一个Cookie对象,key为:JSESSIONID,设置一下最大存活时间,让Cookie持久化保存Session的ID,就可以实现客户端关闭,两次获取Session就是同一个。
- Cookie c = new Cookie("JSESSIONID",session.getId());
- c.setMaxAge(60*60); //1个小时有效期
- response.addCookie(c);
1.session用于存储一次会话的多次请求的数据,存在服务器端;
2.session可以存储任意类型,任意大小的数据。
session与Cookie的区别:
1.session存储数据在服务器端,Cookie在客户端;
2.session没有数据大小限制,Cookie有数据大小限制;
3.session数据安全,Cookie相对于不安全。