为了账号安全,请及时绑定邮箱和手机立即绑定

protected Serializable doCreate(Session session) 这个方法中的sessionId是做什么的?

protected Serializable doCreate(Session session) {
      Serializable sessionId = generateSessionId(session);   
      byte[] key = getKey(session.getId().toString());  
      byte[] value = SerializationUtils.serialize(session);  
      jedisUtil.set(key,value);  jedisUtil.expire(key,600);  
      return sessionId;
}

但是在存入Redis用的确是session.getId()

private void saveSession(Session session){
    if (session!=null&&session.getId()!=null){
        byte[] key = getKey(session.getId().toString());//添加前缀
        byte[] value = SerializationUtils.serialize(session); //将session序列化,以便存入redis
        jedisUtil.set(key,value);
        jedisUtil.expire(key,600);
    }
}

我不明白下面这个操作是做什么用的:

Serializable sessionId = generateSessionId(session);

然后在获取的时候用的是这个 Serializable sessionId

protected Session doReadSession(Serializable sessionId) {
    System.out.println("read session");
    if (sessionId==null){
        return null;
    }
    byte[] key = getKey(sessionId.toString());//添加key的前缀
    byte[] value = jedisUtil.get(key);
    return (Session)SerializationUtils.deserialize(value); //反序列化
}

存入的时候是使用的是直接从session.getId()没有序列化的,读取的时候是序列化的

正在回答

2 回答

在以后你需要从redis中拿去session时是要使用的

protected Session doReadSession(Serializable sessionId) {
    if (sessionId == null) {
	return null;
    }
    byte[] key = getKey(sessionId.toString());		
    byte[] value = jedisUtil.get(key);		
    return (Session) SerializationUtils.deserialize(value);
}


0 回复 有任何疑惑可以回复我~

发现答案在第二部分的1分40秒,这里忘了把id和session做关联

0 回复 有任何疑惑可以回复我~
#1

未卜先知 提问者

看了下源码,其实就是重置了session的id为序列化后的id
2018-08-09 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

protected Serializable doCreate(Session session) 这个方法中的sessionId是做什么的?

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信