什么是HttpSession
会话跟踪技术:
-
Cookie 创建于服务器, 保存在客户端, 记住我实现, 不能跨浏览器, 浏览器的技术
-
HttpSession: javaWeb特有的, 创建于服务器, 保存与服务器, 作为Session域
特征: 同一个用户同一次会话, session域中数据可以共享(多次请求)
HttpSession的创建:
request对象的方法:
HttpSession getSession(boolean create); >参数create: boolean > >- true: 如果当前请求已经创建Session对象, 返回已创建的session, 如果没有, 创建新的session,并返回 > > >默认: 用户第一次请求服务器, 使用session才创建 > >- false: 如果当前请求已经创建Session对象, 返回已创建的session, 如果没有, 返回null等同于: HttpSession getSession(true); 推荐
Session常用的方法:
Session的最大空闲有效时间:
-
默认值30分钟(不改) session自动失效
当前会话中, 上一次请求时间与下一次请求时间如果超过30分钟,这个session已经失效
invalidate() : 立即让session失效, 实现退出功能, 服务器把session池中session对象清除
package com.fs.user.web;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet("/LogoutServlet")
public class LogoutServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//1.让session失效
request.getSession().invalidate();
//2.重定向到login.jsp
response.sendRedirect("/login.jsp");
}
}
session域使用场景:
-
登录信息保存到session域, 作为已登录的凭证
-
产生验证码字符串保存到session域
-
我的购物车保存到session域(也可以购物车保存数据库)
HttpSession原理
HttpSession底层原理:
HttpSession要依赖于Cookie
当首次使用session时,服务器端要创建session,session是保存在服务器端,而给客户端的session的id(一个cookie中保存了sessionId)。客户端带走的是sessionId,而数据是保存在session中。
当客户端再次访问服务器时,在请求中会带上sessionId,而服务器会通过sessionId找到对应的session,而无需再创建新的session。