package com.bjpowernode.oa.web.action;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.servlet.http.HttpSession;
import java.io.IOException;
import java.io.PrintWriter;
@WebServlet("/text/session")
public class TestSessionServlet extends HttpServlet
{
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
//一次请求一个request对象,一个session对应很多request
//从服务器中获取session对象,如果没有则创建
HttpSession session = request.getSession();
response.setContentType("text/html;charset=UTF-8");
//Session机制属于BS结构的一部分,不同的计算机编程语言都有自己的实现类
//Http协议是一种无状态协议,访问的时候,BS的链接,访问完成会断开链接
//这是为了减轻服务器压力,因为这样的无状态协议可以降低服务器压力
//这样服务器压力小的多,BS断开了(在没有请求和响应时),服务器不知道浏览器断开链接了
//如网银(点我安全退出就是为了发送一次请求,让服务器关闭链接,避免造成安全隐患)
//因为我们直接退出时,服务器端我们的session对象没有销毁,而这个对象内还保存着我们的账号密码等私密信息
//安全退出就是为了销毁这个session对象
PrintWriter out = response.getWriter();
out.println("会话对象" + session);
session.setAttribute("","");
session.getAttribute("");
//业务场景,登陆了账号,电脑没有关闭网页,但是人没有操作
//没有新的request和response传输,然后隔了一段时间后才继续操作
//结果提示我们需要重新登录,登录失效,原因就是我们的session因为长时间没有操作
//被服务器清理了,导致我们的会话虽然没有关闭(关闭浏览器),但是我们的登陆状态失效了
//原理是,服务器内部有一个Session集合列表,类似于map
//我们的请求会同时请求一个对应的session号传过去,在response的时候传到浏览器
//浏览器记住这个session的ID,就可以每一次的request都找到同一个session
//为什么关闭浏览器会话会结束,原因是我们关闭浏览器的行为清除了我们浏览器的缓存
//导致sessionID丢失,浏览器再次打开并访问web服务的时候,没有对应的sessionID号
//就找不到对应的session对象了(此时服务器的session对象并没有被清除,还是保存在web服务器中的)
//因为我们的HTTP协议是无状态协议,我们没有请求响应时,双方没有链接,所以浏览器关闭,服务器是不知道的
//Session对象的销毁靠的是超时机制,除非手动销毁
}
}
package com.bjpowernode.oa.web.action;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.servlet.http.HttpSession;
import java.io.IOException;
import java.io.PrintWriter;
@WebServlet("/text/session")
public class TestSessionServlet extends HttpServlet
{
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
//一次请求一个request对象,一个session对应很多request
//从服务器中获取session对象,如果没有则创建
HttpSession session = request.getSession();
response.setContentType("text/html;charset=UTF-8");
//Session机制属于BS结构的一部分,不同的计算机编程语言都有自己的实现类
//Http协议是一种无状态协议,访问的时候,BS的链接,访问完成会断开链接
//这是为了减轻服务器压力,因为这样的无状态协议可以降低服务器压力
//这样服务器压力小的多,BS断开了(在没有请求和响应时),服务器不知道浏览器断开链接了
//如网银(点我安全退出就是为了发送一次请求,让服务器关闭链接,避免造成安全隐患)
//因为我们直接退出时,服务器端我们的session对象没有销毁,而这个对象内还保存着我们的账号密码等私密信息
//安全退出就是为了销毁这个session对象
PrintWriter out = response.getWriter();
out.println("会话对象" + session);
session.setAttribute("","");
session.getAttribute("");
//业务场景,登陆了账号,电脑没有关闭网页,但是人没有操作
//没有新的request和response传输,然后隔了一段时间后才继续操作
//结果提示我们需要重新登录,登录失效,原因就是我们的session因为长时间没有操作
//被服务器清理了,导致我们的会话虽然没有关闭(关闭浏览器),但是我们的登陆状态失效了
//原理是,服务器内部有一个Session集合列表,类似于map
//我们的请求会同时请求一个对应的session号传过去,在response的时候传到浏览器
//浏览器记住这个session的ID,就可以每一次的request都找到同一个session
//为什么关闭浏览器会话会结束,原因是我们关闭浏览器的行为清除了我们浏览器的缓存
//导致sessionID丢失,浏览器再次打开并访问web服务的时候,没有对应的sessionID号
//就找不到对应的session对象了(此时服务器的session对象并没有被清除,还是保存在web服务器中的)
//因为我们的HTTP协议是无状态协议,我们没有请求响应时,双方没有链接,所以浏览器关闭,服务器是不知道的
//Session对象的销毁靠的是超时机制,除非手动销毁
}
}