有面试题问 Cookie 与 Session 的联系与区别 。我也简单记录下自己的理解。
Cookie 存储在客户端 分为 瞬时的和永久的 瞬时的就是只为了实现 seesion, 生命周期就是这一次session 周期 ,就比如我打开浏览器,关掉后与之相关的瞬时Cookie 也清除了,这些Cookie 一般存放在内存中 ,而持久的则是为了实现自动登录,往往持久化在硬盘闪。
Session 则是 存放在服务器中的KEY-VALUE对, session 作为标识, cookie 中存放的也是 sessionid 并且在每次发送请求的时候把 Cookie 发回服务器端,当中就包含这个sessionID
服务器端通过这个sessionID 就能在 Key-value 对中道相应的 session 。 在支持cookie的浏览器中是这样实现的 如果禁用掉那么就是通过URL 重定向来完成的 ,每次请求到来 会 将sessionid 写在url 后面 重新放完已实现session。 所以静态页面是无法实现session的再不支持 cookie 的情况下。
另外需要注意的是 在客户端关闭的时候 只是相当于找不到sessionID了 服务器端 web容器内存中的key-value 并没有删除 ,要等到 session 到期或者其它条件下。
那么web容器中session 怎么实现会比较高效呢?
要想实现 session的定时更新,只需要设置定时线程 ,并设置时间戳 ,误差则是线程的启动间隔。
要想实现如两周持续登录的情况下,则需要实现持久Cookie 存放sessionID ,并且WEB容器中Session 需要持续缓存。
持久化Cookie 的时候如何实现 自动登录 俩客户端共用同一session问题?