加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 业界 > 正文

Tomcat 中的 Session 和 Cookie的爱恨情仇

发布时间:2019-05-16 00:09:19 所属栏目:业界 来源:顿悟源码
导读:HTTP 是一种无状态通讯协议,每个哀求之间彼此独立,处事器不能辨认曾经来过的哀求。而对付 Web 应用,它的勾当都是依靠某个状态的,好比用户登录,此时行使 HTTP 就必要它在一次登录哀求后,有为后续哀求提供已登录信息的手段。 办理步伐就是行使 Cookie

一个 Web 应用对应一个会话打点器,也就是说 StandardContext 内部有一个 Manager 实例。每个容器组件城市启动一个靠山线程,周期的挪用自身以及内部组件的 backgroundProcess() 要领,Manager 靠山处理赏罚就是搜查 Session 是否逾期。

搜查的逻辑是,获取全部 session 行使它的 isValid 判定是否逾期,代码如下:

  1. public boolean isValid() { 
  2.   ... 
  3.   // 是否搜查是否勾当,默认 false 
  4.   if (ACTIVITY_CHECK && accessCount.get() > 0) { 
  5.     return true; 
  6.   } 
  7.   // 搜查时刻是否逾期 
  8.   if (maxInactiveInterval >= 0) {  
  9.     long timeNow = System.currentTimeMillis(); 
  10.     int timeIdle = (int) ((timeNow - thisAccessedTime) / 1000L); 
  11.     if (timeIdle >= maxInactiveInterval) { 
  12.       // 假如逾期,执行一些内部处理赏罚 
  13.       // 首要是关照对逾期变乱感乐趣的 listeners 
  14.       expire(true); 
  15.     } 
  16.   } // 复数永不外期 
  17.   return (this.isValid); 

3.3 Session 耐久化

耐久化就是把内存中勾当的 Session 工具,序列化到文件,可能存储到一个数据库中。假如会话打点组件切归并启用了耐久化成果,那么就会在它生命周期变乱 stop 要领中执行存储;在 start 要领中执行加载。

耐久化到文件,StandardManager 也提供了耐久化到文件的成果,它会把 session 池中勾当的会话所有写入到CATALINA_HOME/work/Catalina///SESSIONS.ser文件中,代码在它的 doUnload 要领中。

FileStore 也提供了耐久化到文件的成果,与 StandardManager 的区别是,它会把每个会话写入到单个文件中,以 .session 定名。

耐久化到数据库,行使以下 SQL,别离把 session 相干数据存储到一个表中,包罗序列化后的二进制数据,表字段信息如下:

  1. create table tomcat_sessions ( 
  2.   session_id     varchar(100) not null primary key, 
  3.   valid_session  char(1) not null, -- 是否有用 
  4.   max_inactive   int not null,-- 最大有用时刻 
  5.   last_access    bigint not null, -- 最后会见时刻 
  6.   app_name       varchar(255), -- 应用名,名目为 /Engine/Host/Context 
  7.   session_data   mediumblob, -- 二进制数据 
  8.   KEY kapp_name(app_name) 
  9. ); 

留意:必要把数据库驱动措施的 jar 文件,放到 $CATALINA_HOME/lib 目次中,以便让 Tomcat 内部的类加载器可见。

4. 小结

本文简朴说明白 Tomcat 对 Session 的打点,虽然了忽略的许多细节,有乐趣的可以深入源码,后续将会对 Tomcat 集群 Session 的实现举办说明。

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读