会话跟踪技术 - Cookie 和 Session 快速上手 + 登陆注册案例( 五 )

id:10

  • 在session中存入其他数据并处理完成所有业务后,需要通过Tomcat服务器响应结果给浏览器
  • Tomcat服务器发现业务处理中使用了session对象,就会把session的唯一标识id:10当做一个cookie,添加Set-Cookie:JESSIONID=10到响应头中,并响应给浏览器
  • 浏览器接收到响应结果后,会把响应头中的coookie数据存储到浏览器的内存中
  • 浏览器在同一会话在此请求服务器的时候,会把cookie中的数据按照cookie: JESSIONID=10的格式添加到请求头中并发送给服务器Tomcat
  • 获取到请求后,从请求头中就读取cookie中的JSESSIONID值为10,然后就会到服务器内存中寻找id:10的session对象,如果找到了,就直接返回该对象,如果没有则新创建一个session对象
  • 关闭打开浏览器后,因为浏览器的cookie已被销毁,所以就没有JESSIONID的数据,服务端获取到的session就是一个全新的session对象
  • 3.3 Session的使用细节3.3.1 Session钝化与活化注意:该部分仅仅是服务器的正常关闭和重启时,Session不会丢失,但浏览器重启时,Session依然会丢失(浏览器中将使用Cookie存储所需Session的id)
    • 钝化与活化
      • 钝化:在服务器正常关闭后,Tomcat会自动将Session数据写入硬盘的文件中
        钝化的数据路径为:项目目录\target\tomcat\work\Tomcat\localhost\项目名称\SESSIONS.ser
      • 活化:再次启动服务器后,从文件中加载数据到Session中
    • Session销毁
    3.3.2 Session销毁
    • 默认情况:无操作,默认30分钟内销毁,可再web.xml中进行配置
      <?xml version="1.0" encoding="UTF-8"?><web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"         version="3.1">    <session-config>        <session-timeout>30</session-timeout>    </session-config></web-app>
    • 调用Session对象的invalidate()方法
      // 从Session中获取数据// 获取Session对象HttpSession session = req.getSession();// 销毁Sessionsession.invalidate();// 销毁后获取数据将报错Object username = session.getAttribute("username");System.out.println(username);
    5、 Cookie和Session的区别
    • Cookie是用来保证用户在未登录情况下的身份识别
    • Session是用来保存用户登录后的数据