2 回答

TA贡献1847条经验 获得超11个赞
cookie是由浏览器维护的, session是由服务器维护的. 两者之间并没有绝对的关系, 只是一般情况下服务器使用cookie维持session而已.
至于时效问题:
- 会话cookie是在浏览器关闭时(或者下次启动时)删除的, 所以只要浏览器不关闭, 会话cookie就不会失效.
- session则是超过一定时间不读取/设置就会过期.
可以发现两者并不同步, 那么为什么实际上感觉不到呢? 因为首先不重启浏览器, 不手动删除cookie, 那么会话cookie就不会失效, 而大多数用户又不会登陆一个网站以后几个小时不操作(直播类/视频类网站即使用户不操作, 也会有网络请求, 后台即可自动续期), 所以session也可以维持住.
你可以试下这种操作:
- 登陆一个网站(不要选择自动登陆), 然后重启浏览器, 再访问这个网站, 这时应该就会出现登陆页.
- 登陆一个网站(比如某个论坛, 不要选择自动登陆), 然后两个小时不点击这个页面, 不关闭浏览器, 之后看看再操作是不是会需要重登录.
至于七天免登陆, 一般是把用户的一些信息加盐hash, 然后记录到数据库, 并且设置一个新的cookie, 七天失效. 当用户访问网站时, 如果没登陆, 则认证这个cookie是不是正确, 正确就会自动登陆, 从用户看来, 就是免登陆.

TA贡献1906条经验 获得超10个赞
我理解的是,cookie中的jsessionid 存储的是sessionId , 服务器需要根据这个Id检索session
Tomcat的默认是用ConcurrentHashMap实现的
protected Map<String, Object> attributes = new ConcurrentHashMap<String, Object>();
- jsessionid没了 ,需要重新登陆获取新的 jsessionid
2.session的销毁时间到了,根据sessionId 取不到session,是否重新创建新的session看配置
javax.servlet.http.HttpServletRequest.getSession(boolean create)
3.session机制中,jsessionid的生命周期就是在浏览器关闭前
4.免登陆,可以将用户名和密码加密后通过Cookie存放在客户端,当服务端上的Session销毁后,使用Cookie里面存放的信息重新执行一次登录操作,重建Session,并更新客户端上Cookie中存放的的Session ID
添加回答
举报