• session会话机制


    一、会话机制定义:

    1. 用户打开浏览器,进行一系列操作,然后最终将浏览器关闭,这个整个过程叫做一次会话。会话在服务器端也有一个对应的java对象,这个java对象叫做:session。
    2. 一个会话中包含多次请求。
    3. 在java的servlet规范当中,session对应的类名:HttpSession(jarkata.servlet.http.HttpSession)
    4. session对象最主要的作用是:保存会话状态。(用户登录成功了,这个是一种登录成功的状态,你怎么把登录成功的状态一直保存下来呢?使用session对象可以保留会话状态。)
    5. request请求域(HttpServletRequest)请求级别的、session会话域(HttpSession)用户级别的、application应用域(ServletContext)项目级别的,所有用户数据共享
    6. 三种域的范围比较:request

    二、session的实现原理:

    在这里插入图片描述

    1. sessionID以cookie形式保存在浏览器内存中。
    2. 正常情况服务器创建session对象后发送cookie给浏览器,浏览器记住这个id用于获取session。
    3. cookie禁用后,服务器正常发送cookie给浏览器,但是浏览器不要了,拒收了。并不是服务器不发了。

    三、设置session对象自动销毁时间:

    <session-config>
        <session-timeout>30session-timeout>
    session-config>
    
    • 1
    • 2
    • 3

    四、session用法:

    1. 某些网页的内容需要用户登录后才能查看,为了防止用户不登录就查看网页内容(即直接输出要查看网页的URL),需要在用户的会话中加入session。只要用户不登录,就会被拦截在登录页面,后续页面也将无法查看。
      实现:
      (1)首先在登录成功的servlet代码中加入session.setAttribute("username",request.getParameter("username"));,给登陆成功的用户创建session对象。
      (2)然后把用户输入的信息添加到会话域中。
      (3)然后在后续页面的servlet中加入if语句,if(session != null && session.getAttribute("username") != null),如果用户没有创建session且session中的"username"为空,则response.sendRedirect(request.getContextPath()+"/index.jsp");重定向到登录界面。如果if为true,,则正常执行相关servlet代码。
    2. 用于用户点击退出登录按钮后清空cookie,提示用户需要重新登陆。
      实现:
      (1)获取session对象:HttpSession session = request.getSession(false);
      (2)判断session是否为空:if (session != null)
      (3)不为空销毁session:session.invalidate();//手动销毁session

    五、访问JSP时会自动创建session:

    因为JSP文件编译后的java代码中有一个变量就是session,即JSP会自动创建一个session,这个session会影响我们判断是否是用户登录成功后创建的session。
    在这里插入图片描述

    • 解决方法:
      方法一:<%page session="false"%>这样访问JSP的时候JSP就不会自动创建session了。不建议用这种方式
      方法二:上述if语句中加入session.getAttribute("username") != null,因为JSP自动创建的session中是没有“username”这个属性的,这个属性是用户登录成功后才传进session会话域的。
  • 相关阅读:
    详解 Spring Boot 项目中的配置文件
    8、学习 Java 中的方法(方法的定义、可变参数、参数的传递问题、方法重载、方法签名)通过官方教程
    Eureka服务注册与发现
    工程管理系统简介 工程管理系统源码 java工程管理系统 工程管理系统功能设计
    重学设计模式-适配器模式-spring当中的应用
    光流法( Optical Flow Method)
    Electron+React如何进行通信
    好的内容回复区
    Java基础深化和提高 ---- 网络编程
    macOS、Linux CentOS 、Docker安装部署canal-server(canal-deployer)服务
  • 原文地址:https://blog.csdn.net/m0_53881899/article/details/126440290