【计算机网络】HTTP协议详解(十):Cookie与Session

Cookie与Session

由于HTTP协议无状态的特征——指每一个HTTP请求都是独立的,后一次请求不知道前一次请求的数据,意味着若后续请求的处理需要前面的信息,就必须重传,就会导致每一次请求传送的数据量增大

但是这种无状态的特征也有存在的意义——解放了服务器,使得服务器不需要之前信息时压力就小响应快

随着Web应用程序的发展,承前启后的交互场景的需要又必须弥补这种无状态、无记忆的缺陷,所以出现了Cookie与Session(会话跟踪技术)


一、Cookie

Cookie是一小段文本信息,客户端第一次请求服务器时,若服务器需要保存用户信息,就会给客户端办颁发一个Cookie,客户端将此Cookie保存在本地,当后续再次向服务器请求时会带上Cookie,服务器检查该Cookie来辨认用户状态

工作原理:
访问某个网站时
客户端(浏览器):在向服务器发送请求前,在本地寻找该网站服务器相关的Cookie,若找到,则在请求中带上Cookie
服务端:根据Cookie检索用户信息,找到则刷新用户信息并且返回刷新后Cookie。若客户端没有发送过来Cookie,或者发送过来的Cookie和服务端的不匹配,则说明用户是第一次访问,则将用户信息保存,并下发一个Cookie返回给客户端(在响应头中以set-cookie首部字段标记)
在这里插入图片描述
cookie失效:
cookie的失效时间是设置cookie的Expires的值
默认值为-1,表示关闭浏览器就会失效
值为0:立即失效,不保存cookie


二、Session

Session是服务端记录客户状态的机制,客户端访问服务器时,服务器把客户端信息以某种形式记录在服务器上
相当于服务器端程序建立了一份客户档案,服务器根据来请求的客户端在客户档案中查询对应的信息
即在服务端维护了一个各个客户端的SessionId和它对应的用户信息(Session)的映射表

工作原理:
客户端发送请求后,服务端检查请求中是否包含SessionId,若包含,则说明该用户之前有访问过,并且给它创建了相应的Session,则根据SessionId在内存中找到对应的Session然后进行后续处理

若客户端是首次请求,在请求中不带有SessionId,或者说服务端在内存中找不到客户端发送过来的SessionId,服务端则会给该用户生成一个新的Session和对应的SessionId(唯一的、不会重复的),保存在服务端的映射表中,并会将SessionId在此次的响应中返回给客户端作为Cookie保存下来,同时进行后续的业务处理
在这里插入图片描述
客户端保存SessionId的其他方式
使用Cookie来保存SessionId是一种常见方式,但是Cookie可以人为地将它禁用、删除,删除了,服务器会重新生成对应的Session并返回SessionId,但是禁用了Cookie,是否就无法使用Session机制来保存用户状态了呢
——另外两种保存SessionId的方式:URL重写、表单中隐藏字段

(1)URL重写:
把SessionId直接附加在URL路径的后面
(如:http://…/xxx ;SessionId= ByOK3vjfDF75C2Hmdn7…)
或者作为查询参数拼在URL后面
(如:http://…/xxx ?SessionId= ByOK3vjfDF75C2Hmdn7…)

(2)隐藏字段
服务器会自动修改请求的表单,在表单中添加一个隐藏字段来保存SessionId,后续请求时提交表单会将SessionId提交上来

Session的有效期
Session和Cookie都可以设置有效时间,不同的是Cookie的有效时间很长甚至永久(只要不人为删除),而Session由于随着访问用户的增多而增大,为了防止内存溢出,就会给Session设置一个有效时间,超过这个时间不活跃的Session,服务器就会将其删除(即客户端超过一定时间没有再访问服务器,Session就会自动失效)
同时,Session依赖保存在客户端的字段为SessionId的Cookie,默认关闭浏览器后则Cookie失效,也就代表本次会话结束、Session失效

Session超时失效为被动失效
同时还可以主动失效:
1.程序调用HttpSeesion.invalidate()可以使Session立即失效
2.通常Session保存在内存中,所以服务器宕机了,Session也就失效了


三、Cookie与Session的区别

1.存放位置不同:Cookie存储在客户端、Session保存在服务端

2.安全性(隐私策略不同):Cookie存储在浏览器里对客户端可见,客户端的某些应用程序可能会窥探、复制甚至修改Cookie的内容,Session存储在服务器端,对客户端是透明的,不存在敏感信息泄露的风险——因此建议重要、敏感信息不要保存在Cookie,或者将Cookie加密,服务端对Cookie解密,确保Cookie只有服务端可以读得懂

3.有效期上的不同:Cookie可以设置保存很久甚至永久,Seesion会定期被清理

4.Session会随着访问量的增大使得服务器压力越来越大


四、HTTP缓存与Cookie、Session的区别

缓存:主要是对静态资源的处理
Cookie与Session:为了确保通信过程的有状态性、交互能够承前启后

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

戴陵FL

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值