浏览器从开启 到 关闭,我们称为一次会话
- session的生命周期:服务器非正常关闭、超过30分钟未访问session对象、调用invalidate()方法都会销毁,服务器正常关闭,则会保存在硬盘上,下次服务器启动时会加载回来,一个会话只有一个session,也就是说,只要服务器那边不关闭,在cookie中设置setMaxAge(int expiry)即可。
- cookie生命周期:和浏览器的关闭与否有关,和服务器关闭与否无关
0 让cookie立即销毁
-1 默认 浏览器必须打开着的,浏览器关闭cookie销毁
0的正整数 0
只要正整数大于0的,就会存活在浏览器对应的硬盘上,不以浏览器的关闭为销毁。
而是时间到期,就会自动销毁
相同的cookie设置,新的会覆盖旧的
- 用户第一次登录服务器后,服务器会返回一些数据(cookie)给浏览器,浏览器保存在本地或者内存,用户第二次访问服务器的时候,服务器就会根据用户上次保存的cookie来判断是哪个用户。
- 当会话开启并且创建session的时候,就会生成一个sessionID,并且服务器把这个ID返回给浏览器以cookie保存,在服务器中,不但会保存SessionID,而且还会保存其产生的用户信息,这样一来,用户下次访问服务器,通过cookie值的sessionID就可以判断其身份,进而获取这个用户上次记录的信息。
- 关闭会话之后,当我们重新打开浏览器窗口时,之前的cookie中存放的Sessionid已经不存在了,此时服务器从HttpServletRequest对象中没有检查到sessionid,服务器会再发送一个新的存有Sessionid的cookie到客户端的浏览器中,此时对应的是一个新的会话,而服务器上原先的session等到它的默认时间到之后,便会自动销毁。
但是如果我把浏览器关闭了呢?这样的话,我该如何再次访问相应的session呢? - 首先,服务器中session的声明周期是可以自己来设置的,默认的是30分钟,那么当我们关闭浏览器之后,浏览器中的cookie消失了,但这个服务器中的session其实还没有消亡,(如果我们需要它消亡的话,我们可以调用invalidate方法,这也是网站中的安全退出常见操作之一)。
- 既然没有消亡,为什么关闭浏览器之后,我们就访问不到了呢?那是因为cookie中的JSESSIONID信息没有了,不会自动携带这个session信息了,服务器找不到对应的session,就会自动添加新的session,这个新添加的session显然不是我们需要的。所以,我们就可以利用cookie来实现这个需求。
- 只要我们手动为cookie中添加JSESSIONID信息,那么不管你的浏览器是否关闭,我的cookie中都会携带JSESSION信息,这样的话,服务器就一定能够找到对应的session,而不会重新建立一个新的session,这样只要session没有消亡,就一定可以访问到对应的session。
session和cookie的应用场景
session:
除非是纯静态的页面,否则都会用到session来记录用户的行为。
cookie典型应用场景:
1.判断用户是否登陆过网站,以便下次登录时能够直接登录。如果我们删除cookie,则每次登录必须从新填写登录的相关信息。而修改账户密码等操作也需要对其登陆状态进行判断。
2.另一个重要的应用是“购物车”中类的处理和设计。用户可能在一段时间内在同一家网站的不同页面选择不同的商品,可以将这些信息都写入cookie,在最后付款时从cookie中提取这些信息,当然这里面有了安全和性能问题需要我们考虑了。



