1、session实现原理

  • session列表是一个Map,map的key是sessionid,map的value是session对象
  • 用户发送第一次请求,服务器生成session对象,同时生成id,将id发送给浏览器
  • 用户发送第二次请求,自动将浏览器内存中的id发送给服务器,服务器根据id找到session对象
  • 关闭浏览器,内存小时,cookie消失,sessionid消失,会话等同于结束

⚠️cookie禁用了,session还能找到吗?

  • cookie禁用:服务器正常发送cookie给浏览器,但是浏览器不要了,拒收了,并不是服务器不发了
  • [x] cookie禁用了,session机制仍然可以实现,需要使用URL重启机制

    • URL重写会增高开发者的成本,开发者在编写任何请求路径的时候,都需要在后面添加一个sessionid

      2、session对象的获取

  • [x] 获取session对象

    • HttpSession session = request_._getSession();
    • 作用:从WEB服务器当中获取session对象,如果session对象没有,则新建
  • [x] seesion不新建对象

    • HttpSession session = request_._getSession(false);
    • 作用:从WEB服务器中获取session对象,如果session对象没有,则返回一个null

      3、session什么时候被销毁?

      ⚠️浏览器关闭的时候,浏览器服务器是不知道的
  • [x] 一种销毁:是超时销毁(超时机制)

  • [x] 一种销毁:是手动销毁(点击退出按钮)session_._invalidate();

    4、超时机制

  • [x] 在web.xml中设置session超时时长

⚠️如果不配,默认是30分钟,设置路径在:Apache-tomcat/conf/web.xml中第638行

  1. <!--session的超时时长是30分钟-->
  2. <!--如果30分钟过去了,session对象仍然没有被访问,session会被销毁-->
  3. <session-config>
  4. <session-timeout>30</session-timeout>
  5. </session-config>

image.png

5、注意

  • JSP会在程序启动时,创建session对象,使得session对象不为空,可以在inedx.jsp中设置,使得JSP不创建seesion,但是不影响seesion的功能

image.png