Tomcat的Session管理机制
阅读原文时间:2021年04月20日阅读:1

一、Session使用原理

请求过程中的session操作:

(1)首先要解析请求中的sessionId信息,然后将sessionId存储到request的参数列表中。

(2)然后再从 request获取session的时候,如果存在sessionId那么就根据Id从session池中获取session,如果sessionId不存在或者session失效,那么则新建session并且将session信息放入session池,供下次使用。

二、重写session

1.在默认的情况下Tomcat的Session管理,如果不进行设置的话是由Tomcat自带的StandardManager类进行控制的。

2.通过自定义Manager, 重写的就是org.apache.catalina.session.ManagerBase(StandardManager)里边的具体写的操作,比如add、findSession、createEmptySession、remove等方法,并将对session的增删改查操作指向了对Redis数据存储的操作。

三、代码实例

public class RedisManager extends StandardManager {
    @Override
    //调用request.getSession()时,先调用findSession,如果没有获取session信息,调用createSession创建session
    public Session findSession(String id) throws IOException {
      if (id == null)
            return null;
        return SessionUtil.getSessionFromRedis(sessions, id, this);
    }

    @Override
    public Session createEmptySession() {
        return SessionUtil.createEmptySession(this);
    }

}