1. Session概述
- Session用于记录用户的状态。Session指的是在一段时间内,单个客户端与Web服务器的一连串相关的交互过程
- 在一个Session中,客户可能会多次请求访问同一个资源,也有可能请求访问各种不同的服务器资源
2. Session原理
- 服务器会为每一次会话分配一个人Session对象
- 同一个浏览器发起的多次请求,同属于一次会话(Session)
- 首次使用到Session时,服务器会自动创建Session,并创建Cookie存储SessionId发送回客户端
3.Session使用
- Session作用域:拥有存储数据的空间,作用范围是一次会话有效
- 一次会话是使用同一浏览器发送的多次请求。一旦浏览器关闭,则会话结束
- 可以将数据存入Session中,在一次会话的任意位置进行获取
- 可以传递任何数据(基本数据类型、对象、集合、数组)
3.1 获取Session
package com.qf.sessions;
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 javax.servlet.http.HttpSession;
import java.io.IOException;
@WebServlet(name = "SessionServlet",value = {"/ss"})
public class SessionServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 1.通过request对象获取Session对象
HttpSession session =request.getSession();
System.out.println(session.getId());
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request,response);
}
}
- 如图,在第一次访问时,服务器创建了Session,并通过设置Cookie的方式
3.2 Session保存数据
3.3 Session获取数据
3.4 Session移除数据
package com.qf.sessions;
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 javax.servlet.http.HttpSession;
import java.io.IOException;
@WebServlet(name = "SessionServlet",value = {"/ss"})
public class SessionServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 1.通过request对象获取Session对象
HttpSession session =request.getSession();
// 2.使用session保存数据
session.setAttribute("username","gavin");
System.out.println(session.getId());
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request,response);
}
}
package com.qf.sessions;
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 javax.servlet.http.HttpSession;
import java.io.IOException;
@WebServlet(value = "/getValue")
public class GetValueServlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//1. 通过request获取session对象
HttpSession session = req.getSession();
String s = (String)session.getAttribute("username");
System.out.println("从session中获得了 " + s);
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doPost(req, resp);
}
}
4. Session 与 Request应用区别
-
request是一次请求有效,请求改变,则request改变
-
session是一次会话有效,浏览器改变,则session改变
5. Session的生命周期
- 开始:第一次使用到Session的请求产生,则创建Session
- 结束:
- 浏览器关闭,则失效
-
Session超时,则失效
-
session.setMaxInactiveInterval(seconds); //设置最大有效时间(单位:秒)
- 手动销毁,则失效
- session.invalidate(); //登录退出、注销
网友评论