学习Cookie和session这一篇就够了

Cookie

概念

Cookie全称是HTTP Cookie,是一种在客户端保存数据的技术,以键值对的形式存储在客户端。

Cookie可以分为内存cookie和磁盘cookie。内存cookie在浏览器关闭后消失,磁盘cookie超时后消失。当浏览器发送请求时,将自动发送对应cookie信息,前提是请求url满足cookie路径

在这里插入图片描述

特点

  1. 按照域名存储,你在哪一个域名下存储的内容, 就在哪一个域名下使用, 其他域名都用不了, 和资源路径地址没有关系。

注意: 127.0.0.1 和 localhost 不同

在这里插入图片描述
2. 存储大小有限制,4KB 左右或者50 条左右。
3. 时效性,默认是会话级别的时效性(关闭浏览器就没有了),设置存活时间后会保存到硬盘,可以手动设置。
4. 请求自动携带,当你的 cookie 空间里面有内容的时候,只要是当前域名下的任意一个请求, 都会自动携带 cookie 放在请求头里面, cookie 里面有多少自动携带多少,没有就不会携带了。
5. 前后端操作,前端可以通过 js 操作 cookie 空间进行增删改查,后端也可以通过任何后端语言进行 cookie 空间的增删改查。
6. Cookie不能跨域,我们Cookie的domain属性是sso.a.com,在给app1.a.com和app2.a.com发送请求是带不上的。

属性

  • name 名称,一旦创建,名称便不可更改
  • value 值,如果值为Unicode字符,需要为字符编码。如果值为二进制数据,则需要使用BASE64编码
  • maxAge 失效的时间,单位秒。正数,则该Cookie在maxAge秒之后失效。如果为负数,该Cookie为临
  • Cookie,关闭浏览器即失效,浏览器也不会以任何形式保存该Cookie。如果为0,表示删除该Cookie。默认为-1。
  • signed 所请求的cookie应该被签名
  • expires cookie 过期的 Date
  • path cookie 路径, 如果设置为“/sessionWeb/”,则只有contextPath为“/sessionWeb”的程序可以访问该Cookie。如果设置为“/”,则本域名下contextPath都可以访问该Cookie。注意最后一个字符必须为“/”。默认是’/’,
  • domain cookie 域名。如果设置为“.google.com”,则所有以“google.com”结尾的域名都可以访问该Cookie。注意第一个字符必须为“.”。
  • secure 是否仅被使用安全协议传输。安全协议。安全协议有HTTPS,SSL等,在网络上传输数据之前先将数据加密。默认为false。
  • httpOnly 设置为true,则服务器可访问 cookie, 浏览器js脚本将无法读取到cookie信息,这样能有效的防止XSS攻击。默认是 true
  • overwrite 一个布尔值,表示是否覆盖以前设置的同名的 cookie (默认是 false). 如果是 true, 在同一个请求中设置相同名称的所有 Cookie(不管路径或域)是否在设置此Cookie 时从 Set-Cookie 消息头中过滤掉。
  • comment 用处说明

session

概念

Session字面含义就是会话。由于HTTP是无状态协议,为了保持浏览器与服务器之间的联系,才有了Session。Session就是用于在服务器端保存用户状态的协议。通常用来保存用户的登录状态。
服务端(Tomcat等)专门开辟一块内存来保存session,默认有效时间为30分钟,每个session都有一个唯一的sessionId,默认保存在cookie中,禁用Cookie就使用url重写,把sessionId加在url路径。

在这里插入图片描述

流程

当用户发送一个请求到服务器端时,服务器会先检查请求中是否含有sessionid(存在cookie中或者在url中)

  • 如果不存在,说明是第一次请求,就会为该请求创建一个session对象,并将sessionid放到响应头的set-cookie中,格式set-cookie:sessionid,下次再请求时cookie中就会有一个name为jsessionid的cookie,value就是sessionid。
  • 如果存在sessionid,就会在服务器查找是否有该sessionid对应的session,如果有就使用,没有就创建一个。

客户端与服务端第一次会话时:服务端会将sessionId放到响应头的set-cookie中

注意: 第一次会话是指:当后端接口请求参数有HttpSession 或者后端创建HttpSession对象时,服务端会将sessionId放到响应头的set-cookie

在这里插入图片描述
第二次会话时:客户端会携带了第一次收到的sessionid,客户端会将所有的Cookie信息全部携带

在这里插入图片描述

对象职责
SessionId负责标识客户端/用户
HTTP负责传递SessionId
Cookie负责保存SessionId
服务器负责保存Session内容

分布式部署问题

分布式部署时,使用session会有问题

  1. 粘性session:有一个ip来了,分给一个服务器处理,下次相同的ip来访问,还是使用相同的服务器处理,这样就能使用上次的session。但是会有问题,负载不均衡
  2. 同步session:有一个服务器创建了session,同步给其他的服务器。这样服务器之间会产生关联
  3. 共享session:用一台服务器专门用来存储session,其他的服务器都向该服务器获取session。但是如果该服务器挂了,就gg
  4. 存到数据库,所有的服务器都访问数据库redis,得到会话的数据。数据库做一个集群,主从备份,不怕宕机
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值