JavaWeb这个时间有点久了,不能学了前面忘后面,是时候总结一下了

Cookie

cookie由服务器生成,发送给浏览器,保存在浏览器上。

cookie生命周期
  • 会话级别: 本次浏览器关闭
  • 保存在 浏览器内存中的cookie(默认)。 特点:浏览器关闭,cookie就会销毁
  • 持久化级别: cookie的存活时间过期
  • 保存在浏览器对应的 硬盘 上。特点:浏览器即使关闭,cookie也会保存下来(cookie的销毁与浏览器是否关闭无关,和cookie的存活时间有关)
  • setMaxAge(int expiry) 设置cookie的存活时间。 秒
  • -1 默认。保存在浏览器的内存中 浏览器关闭cookie销毁
  • 0 让cookie立即销毁 1970年1月1日就过期
  • >0 的正整数
    只要正整数大于0的,就会存活在浏览器对应的硬盘上,不以浏览器的关闭为销毁。而是时间到期,就会自动销毁

Session

保存在服务器的会话技术。

Session原理

java cookie 过期时间 java浏览器cookie默认存活时间_java

举个例子:银行账户是一个 session,银行卡是一个 sessionid,卡本身是一个cookie,卡里面存了一个 sessionid

当你首次访问服务器时,服务器为你创建了一个 session,并且给了你一个sessionid,让你带走。session 就相当于一个银行账号,sessionid 相当于一个唯一标识,它放到了一个 cookie 里面让你带走,你(客户端) session 里面的东西都寄存在服务器端,我不动它,当需要用的时候,sessionid 给服务器,服务器里面的东西,就都可以拿出来。一旦中途关闭了浏览器,里面的 cookie 就没了。这时候服务器会帮你再创建一个 sessionid (相当于办卡),把一个新 sessionid 分配给你让你带走,原先的 session 还在服务器端,但是没有人能够获取到它,因为没有对应的sessionid 就没法找到这个 session。时间一久(默认三十分钟,session 最大不活动时间),服务器看到这个 session 没人用就扔了。

session生命周期

创建:第一次调用 getSession() 创建

销毁:

1、服务器非正常关闭

服务器正常关闭时,session对象会序列化方式保存到硬盘上。下次服务器正常启动时,硬盘数据就会回到内存中。

2、主动调用 session对象.invalidate()

3、超过 30 分钟没有调用 session

Session 和 cookie 区别

cookie是浏览器技术, 是服务器发送过来的, 保存在浏览器

session是服务器技术, 数据保持在服务器,通过cookie与浏览器建立联系, 保证用户在切换页面时保持会话

区别:

  1. cookie只能存储英文字符串, session可以存储任意数据
  2. cookie只能存储少量数据,session可以存储大量数据
  3. cookie默认生命周期是当前会话, 关闭浏览器自动销毁, session默认生命周期是30分钟

扩展题:浏览器关闭并重新开启,之前的 session 是否立即销毁?为何获取不到浏 览器关闭之前的 session 数据?

详解:

session 依赖于 cookie 通过 JSESSIONID 传递 session 的 id

getSession()时,通过 JSEESSIONID 的 cookie 寻找已有的 session 对象。

浏览器关闭时,JSESSIONID 是会话级别 cookie,被浏览器删除了。

再次开启浏览器向服务器发送请求时,因为没有 JSESSIONID 的 cookie,getSession()会创建了一个新 session,新 session 没有之前的数据。