正常情况下,cookie的有效时间和session对象的销毁时间应该一样。
但是如果不一样的话
1、cookie有效时间到了,session的销毁时间没到,这个时候jsessionid已经没了,服务器会重新创建一个新的session,那原来的session是不是只能等它到销毁时间到了销毁。
2、如果cooke的有效时间没到,session的销毁时间到了,这个时候服务器根据这个jsessionid重新创建一个新的session,那这个还算登录了还是没登录,还是不是免登录了。
3、getSession会自动帮我们自己创建一个cookie,如果我们要设置cookie有效的时间,只能自己创建一个,然后response.add(cookie),那么这时候不是会有两个cookie吗
4、如果是七天免登录,在请求的方法我们设置cookie的七天的时间,那么不是每一次请求都会重新设置一遍有效时间吗,比如我隔了三天重新请求,会不会又被设置了七天
cookie是由浏览器维护的, session是由服务器维护的. 两者之间并没有绝对的关系, 只是一般情况下服务器使用cookie维持session而已.
至于时效问题:
可以发现两者并不同步, 那么为什么实际上感觉不到呢? 因为首先不重启浏览器, 不手动删除cookie, 那么会话cookie就不会失效, 而大多数用户又不会登陆一个网站以后几个小时不操作(直播类/视频类网站即使用户不操作, 也会有网络请求, 后台即可自动续期), 所以session也可以维持住.
你可以试下这种操作:
至于七天免登陆, 一般是把用户的一些信息加盐hash, 然后记录到数据库, 并且设置一个新的cookie, 七天失效. 当用户访问网站时, 如果没登陆, 则认证这个cookie是不是正确, 正确就会自动登陆, 从用户看来, 就是免登陆.