Session 与 Cookie 有什么关系

Session

Session 是存储在服务器上的,每个用户对应在服务器上有一个session,用来存储会话过程中的信息。session是有时间限制的,达到时间以后会失效。当然,用户主动关闭会话session也会失效。

Cookie

Cookie是存储在本地的,客户端访问服务器会通过存储在cookie中的JSESSIONID 也就是sessionId来对应该用户在服务器上的session。 当然 cookie 中存储的不仅仅只有 sessionId这个字段,其他字段存储也可以自定义,但是存储的字段都要发送请求到服务器通过服务器传回的response设置,是不能直接手动设置的 (据我了解的是这样的,后续如果有新的发现会更新)。

HTTP 协议时无状态的,那么服务器怎样将每个请求与用户对应起来呢?

  1. 在客户端第一次向服务器发送请求的时候会在请求头(Request Headers)中附带一个sessionId 如下, 可以看到这个sessionId是从cookie中取到的,当然没有就不会传了。这个sessionId是之前用户所使用的,可能是有效的(session还没有过期,用户也没有登出),也可能是无效的(很久以前存储的)。
Request Headers
	Cookie: JSESSIONID=F72CB9BFE8AEF8555C8BE46C95D7F0B
  1. 如果是有效的sessionId,那么会与服务器直接连接,使用之前访问过程中产生的session。如果是无效的,那么服务器不认可这个sessionId,会在响应头(Response Headers)返回给客户端一个新的sessionId 如下,让用户在之后的请求使用这个新的sessionId。
Response Headers
	Set-Cookie: JSESSIONID=86907ACE2D6792F7F9D1C798A56B916; Path=/; HttpOnly
  1. 从上面的Response Headers中可以看到在设置cookie时服务器同时指定了domain和path。 Domain 是服务器域名,可以是一级,二级,三级等,区别是只有在域名对应的情况下可以共享这个cookie。path是指在本域内对此cookie具有访问权限的路径,只有此path下的路径才具有访问权限。上例中的“Path = /” 就表示该cookie在这个domain全目录下都有效。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值