【Web】关于Session过期/失效的理解

时间:2023-03-08 23:39:57
【Web】关于Session过期/失效的理解

一直好奇关于Session的过期,一种说法是关闭浏览器即Session失效,另一种说法是可以设置Session的过期时间,时间到了自动过期。

这两种说法到底是怎么回事?Session过期跟Cookie过期又有什么关系?

网上搜了几篇相关文章:

通过阅读上面几篇文章后,对Session过期有了新的理解,简单总结一下:

  • Cookie保存在客户端浏览器,Session保存在服务器。
  • Cookie可以设置过期时间。
    • 如果Cookie不包含到期日期,则可视为会话Cookie(Session Cookie)。会话Cookie存储在客户端的内存(浏览器占用的内存)中,决不会写入磁盘。当浏览器关闭时,Cookie将从此永久丢失。
    • 如果Cookie包含到期日期,则可视为持久性Cookie,存储在客户端的磁盘中。在指定的到期日期,Cookie将从磁盘中删除。
  • 客户端请求服务端时,如果客户端的Cookie中没有当前会话的Session Id,则服务端会新分配一个Session,并将与该Session对应的Session Id存到Cookie中发回给客户端浏览器。
  • 由于大部分的网站在发回Session Id时使用了会话Cookie(即没有设置过期时间),导致该Cookie存在客户端内存中,所以关闭浏览器即丢失了Session Id信息,再次访问服务端时才找不到对应的Session,于是才有了“关闭浏览器则Session过期”的说法!
  • 服务端在保存Session时也可以设置该Session的过期时间,服务端的Web服务容器通常也有一个默认的过期时间。若访问服务器后,保持不关闭浏览器一段时间,超过Session过期时间后再次访问,会发现依然Session过期找不到了(比如表现为跳转到登录页面),则是“没有关浏览器但Session过期了”!
  • 当(存放着Session Id的)Cookie和Session中两者有任一过期,即宣告会话过期。

另外,关于Java中设置Session的过期,参考:http://www.cnblogs.com/diewufeixian/p/4221747.html

总结一下方法有三:

  • 在web容器中(如Tomcat)修改配置文件
  • 在工程的web.xml中设置
  • 创建Session后通过java代码设置