Session

Session

概念

服务器端会话技术,在一次会话的多次请求间共享数据,将数据保存在服务器端的对象中。HttpSession。

快速入门

  1. 获取HttpSession对象:
    HttpSession session = req.getSession()
  2. 使用HttpSession对象
    Object getAttribute(String name)
    void setAttribute(String name, Object value)
    void removeAttribute(String name)

原理

Session的实现依赖于Cookie,在第一次请求时,如果没有Cookie,会在内存中创建一个Session对象,给它一个id值,然后响应时响应头中set-session:JSESSIONID=id值,再次请求时,请求头中Cookie中会有这个JSESSIONID=id值,从而找到内存中的session。

细节

  1. 当客户端关闭后,服务器不关闭,两次获取session是否为同一个?
    • 默认情况下,不是同一个,因为客户端关闭了,代表这次会话结束了,再次打开客户端是开启新的对话,获取的是新的session对象。
    • 如果在关闭客户端后,再打开时获取的session相同,则可以创建Cookie,键为JSESSIONID,值为session的id值,设置Cookie的最大存活时间,让Cookie持久化保存。
  2. 客户端不关闭,服务器关闭后,两次获取的session是同一个吗?
    • 不是同一个,但是要保证数据不丢失。tomcat会自动完成以下工作:
      • session的钝化:在服务器正常关闭之前,把session对象序列化到硬盘上
      • session的活化:在服务器启动后,将session文件转化为内存中的session对象
    • session的钝化将项目中的文件打包成war包丢到tomcat的webapps目录下即可,打开本地的tomcat运行项目后会自动活化,idea中无法完成这个操作,idea会钝化成功,但是活化会失败,因为重新启动服务器后,idea会删除原本存放session文件的那个目录,然后创建这个目录,所有无法读取到session文件。
  3. session的失效时间?即什么时候被销毁?
    1. 服务器被关闭
    2. session对象调用invalidate()
    3. session的默认失效时间是30分钟,可以在tomcat的web.xml中修改这个默认失效时间,也可以在自己的项目中的web.xml修改这个失效时间

Session的特点

  1. 用于存储一次会话的多次请求的数据,存在服务器端
  2. 可以存储任意类型任意大小的数据

Session与Cookie的区别

  1. Session存储数据在服务器端,Cookie在客户端
  2. Session没有数据大小限制,Cookie有限制
  3. Session数据安全,Cookie相对来说不安全
打赏
  • 版权声明: 本博客所有文章除特别声明外,均采用 Apache License 2.0 许可协议。转载请注明出处!

请我喝杯咖啡吧~

支付宝
微信