
引言1什么是会话用户打开浏览器访问网站的多个资源直到关闭浏览器的整个过程中称为一次会话。会话的核心需求保存用户状态让服务器识别同一用户的连续请求。2HTTP无状态特性HTTP协议默认不保存请求状态每次请求都是独立的服务器不会记录上一次的用户操作。Cookie和Session就是为了弥补HTTP无状态缺陷而生的会话跟踪技术3为什么需要Cookie和SessionHTTP无状态无法识别用户身份无法实现登录保持用户个性化数据存储等功能二者配合实现Web端用户会话状态管理。一Cookie详解客户端会话技术1Cookie定义:Cookie是由服务端生成发送给客户端由客户端保存在本地的数据键值对格式。浏览器自动存储Cookie后后续每次请求都会自动携带Cookie到服务器实现用户的身份识别。2Cookie的核心特性*存储位置客户端浏览器本地数据格式仅支持字符串Ascll字符串无法存储对象大小限制单个域名的Cookie的总大小小于等于4KB数量有限生命周期分为临时Cookie浏览器关闭就销毁持久Cookie设置expires/max - age过期自动删除自动携带同域名下所有请求会自动携带Cookie无需手动传参安全性安全性比较低可被客户端查看篡改窃取3Cookie的关键属性*Domain指定Cookie生效域名默认当前域名可实现子域名共享什么叫子域名Path指定Cookie生效路径默认根路径Max - Age / Expires:设置过期时间控制持久化Secure开启后仅HTTPS加密请求会携带CookieHttpOnly禁止JS读取Cookie防止XSS攻击核心安全配置解释XSS跨站脚本攻击:攻击者会往页面里植入恶意JavaScript代码。如果这段代码能读到你的Cookie就可以把登录凭证给偷走。给Cookie加上HttpOnly之后浏览器就会禁止JS读取这个CookieSameSite防止CSRF跨站请求伪造攻击解释CSRF跨站请求伪造比如你登录了A网站比如银行然后去点击恶意网站B的链接B网站让你的浏览器向A网站发送请求比如转账浏览器会自动带上A网站的Cookie导致转账成功。在这个过程中你的登录凭证就像一张通行证SameSite规定只有从原网站进来的才能用这张通行证其他网站进来的一律不认。4Cookie应用场景记住登录状态用户偏好设置页面浏览记录轻量级标识存储三Session详解服务端会话技术1Session定义Session是服务端的会话对象服务器为每一个独立用户创建唯一的Session空间用于存储用户的会话数据登录信息权限业务数据。2Session特性*存储位置服务器端内存 / Redis / 数据库数据格式支持任意数据类型对象集合字符串大小限制无严格限制受服务器资源影响生命周期默认超时销毁服务器重启手动销毁也会失效浏览器关闭不会销毁Session但是会导致客户端的SessionID消失安全性安全性高用户无法直接操作服务端Session数据仅通过SessionID关联状态特性有状态占用服务器内存资源3Session工作核心SessionID服务器创建Session后会生成唯一的SessionID通过Cookie下发到客户端客户端后续请求携带该Cookie服务器通过SessionID匹配对应的服务端Session从而识别用户。四:Cookie和Session完整工作流程1首次请求无会话1客户端首次请求服务器接口没有任何Cookie数据没有访问服务器之前可以看到Cookie为空2服务器接收请求识别新用户创建专属Session对象生成唯一SessionID框中参数为true代表如果么有Session就自动创建Session3服务器通过Set - Cookie响应头将SessionID发送给客户端客户端保存该Cookie2后续请求会话生效1客户端每次请求同域名接口自动携带包含SessionID的Cookie2,服务器解析Cookie中的SessionID匹配对应的服务端Session3读取Session中国存储的用户数据完成身份识别和状态保持3会话失效服务器Session超时主动销毁服务器重启会话结束客户端Cookie过期或者清空也会断开会话关联。问浏览器关闭后Session会失效吗答不会。1浏览器关闭只会销毁临时Cookie存储SessionID和Cookie不会删除服务器端的Session数据。2服务器端Session会一直存在直到达到超时时间默认是30min除非手动销毁或者服务器重启。3关闭浏览器后再访问因本地SessionID Cookie丢失无法匹配原有Session看似失效实则服务端Session依然存在。问如果浏览器禁用CookieSession还能用吗如何解决答默认不能用但可手动解决。1常规Session依赖Cookie来存储SessionID禁用Cookie后客户端无法携带SessionID无法匹配会话2解决方案URL重写将SessionID拼接在请求URL中服务器解析URL中的SessionID完成会话匹配。3缺点URL会暴露SessionID安全性较低。问Cookie和Session哪个更安全为什么Session更安全。1Cookie数据存储在客户端用户可以直接查看修改窃取容易发生XSSCSRF攻击2Session核心数据存储在服务端客户端存储唯一的SessionID即使ID泄露没有对应的服务端数据权限风险更低。问传统Session存储在单服务器内存在集群环境下用户请求被分发到不同服务器Session不共享会出现登录失效状态丢失问题(Session共享问题)解决方案1Session持久化将Session数据存入Redis数据库实现多服务器共享2负载均衡黏包固定用户请求分发到同一台服务器缺点单点故障负载不均3替代方案前后端分离项目使用Token / JWT替代传统Session无状态适配分布式问如何实现 “记住我” 功能普通登录使用临时Cookie浏览器关闭即失效Session短期有效记住我设置持久化Cookie延长Cookie过期时间长期保存用户标识无需重复登录。