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

关于Cookie和Session实现用户免登录的疑问?

关于Cookie和Session实现用户免登录的疑问?

拉丁的传说 2019-05-21 17:19:47
正常情况下,cookie的有效时间和session对象的销毁时间应该一样。但是如果不一样的话1、cookie有效时间到了,session的销毁时间没到,这个时候jsessionid已经没了,服务器会重新创建一个新的session,那原来的session是不是只能等它到销毁时间到了销毁。2、如果cooke的有效时间没到,session的销毁时间到了,这个时候服务器根据这个jsessionid重新创建一个新的session,那这个还算登录了还是没登录,还是不是免登录了。3、getSession会自动帮我们自己创建一个cookie,如果我们要设置cookie有效的时间,只能自己创建一个,然后response.add(cookie),那么这时候不是会有两个cookie吗4、如果是七天免登录,在请求的方法我们设置cookie的七天的时间,那么不是每一次请求都会重新设置一遍有效时间吗,比如我隔了三天重新请求,会不会又被设置了七天
查看完整描述

2 回答

?
潇潇雨雨

TA贡献1833条经验 获得超4个赞

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

TA贡献1806条经验 获得超8个赞

我理解的是,cookie中的jsessionid存储的是sessionId,服务器需要根据这个Id检索sessionTomcat的默认是用ConcurrentHashMap实现的
protectedMapattributes=newConcurrentHashMap();
jsessionid没了,需要重新登陆获取新的jsessionid
2.session的销毁时间到了,根据sessionId取不到session,是否重新创建新的session看配置
javax.servlet.http.HttpServletRequest.getSession(booleancreate)
3.session机制中,jsessionid的生命周期就是在浏览器关闭前
4.免登陆,可以将用户名和密码加密后通过Cookie存放在客户端,当服务端上的Session销毁后,使用Cookie里面存放的信息重新执行一次登录操作,重建Session,并更新客户端上Cookie中存放的的SessionID
                            
查看完整回答
反对 回复 2019-05-21
  • 2 回答
  • 0 关注
  • 1025 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信