Cookie与Session教程

Cookie详解

Cookie是什么?

Cookie是一段可以标识用户的信息,由服务器产生发送给客户端保存

为什么需要使用Cookie?

Http是无状态的,即服务器没有记忆能力,所以在完成有关联性操作时会非常麻烦。例如网购时,登录->添加购物车->下单->结算->支付,这系列操作都要知道用户的身份才行,但服务器不知道这些请求是有关联的,每次都要验证用户身份信息。因此为了解决这个问题,Cookie技术应运而生。

Cookie工作流程

  1. 客户端第一次请求服务器时,服务器会产生包含用户信息的Cookie并发送给客户端
  2. 客户端收到Cookie后根据Cookie的过期时间将Cookie保存在浏览器或者本地
  3. 客户端在之后的请求中都会带上Cookie,让服务器验证自己身份

Cookie生命周期

服务器生成Cookie时就设定好了其有效时间,一般有三种情况:

  1. 在指定时间后过期
  2. 立即删除Cookie
  3. 客户端关闭后过期

Cookie的缺陷

  1. 不安全,存在Cookie欺骗,因为Cookie是存储在客户端的,所以可以被别有用心者盗取,虽然Cookie是被加密的,但是非法者不用知道具体Cookie的内容,直接将其发送给服务器,并且可以通过验证,就可以冒充他人身份登录网站。
  2. 数量受限,一个浏览器最多能够创建的Cookie数量为300个,每个Cookie大小不超过4KB,且单个站点保存的Cookie不能超过20个
  3. Cookie可以被浏览器禁用

Cookie被禁用后如何验证用户身份

  1. 可以直接在每次请求URI后带上SessionID 参数
  2. 使用token技术,类似于Cookie,在客户端第一次请求服务器时,服务器产生一个token(一段字符串)并送给客户端,客户端之后的每次请求带上token即可

Session详解

Session是什么?

Session就是会话,它是用来维护客户端和服务器之间关联的一种技术。
会话:用户打开浏览器->访问web资源->关掉浏览器。这个过程被称为一个会话。

为什么需要Session?

相信聪明的你一定知道~,因为Http是无状态的,从而使得服务器无法记住用户(理由同Cookie)。

Session的工作流程

  1. 客户端在第一请求服务器时,服务器为其产生Session对象存在服务器,并将SessionId放入Cookie发送至客户端
  2. 客户端后面访问浏览器时,都会带上Cookie,服务器从Cookie中获取SessionId,通过SessionId就可以找到对应的Session对象,获取用户信息

Session的生命周期

Session的生命周期一般可以被设置为两种

  1. 指定时间后过期
  2. 永不过期(比较少见,因为Session是存在服务器的会增加服务器负担)

Session的优缺点

优点:Session是存放在服务器的,因此不容被获取,较安全
缺点:正因为是放在服务器,所以会增加服务器负担

Cookie与Session的区别

我认为Cookie与Session最大的区别就是Cookie保存在客户端,而Session保存在服务器。其他的略微差异都是来源于它。如因为Cookie是存在客户端,所以更容易被获取从而造成安全问题,而Session就不会被轻易获取,故Session相较于Cookie更安全。因为Session存于服务器,所以会占用服务器性能,而Cookie就不会。因为Cookie存于客户端,所以只能存一些简单的字符串,而Session由于存在于服务器,所以可以存一些复杂的对象。因为Cookie存于客户端,所以会存在一些存储大小限制,而Session就没有大小限制。

Cookie与Session的结合使用

用Cookie保存用户的sessionId,用户每次请求时,服务器可以从Cookie中获取sessionId,并通过sessionId找到对应用户的身份信息

如何解决分布式Session问题

分布式会带来什么样的Session问题呢?分布式系统中,我们有多台服务器同时工作,假如用户第一次请求登录被分配到了服务器A,那么A就会生成一个对应的Session,并将sessionId返回,此时Session是存在于服务器A的,用户第二次请求被分配到了服务器B,此时服务器B上并没有该用户的Session,因此该用户又得重新登录,服务器B生成了对应的Session,并将sessionId返回。用户第三次请求又被分配到了服务器A,但是A并不能通过该sessionId找到对应的Session,因为该sessionId是服务器B产生的,所以用户又得重新登录。。。
对于分布式Session问题,一般有三种解决方案

  1. Nginx ip_hash策略,服务端使用Nginx代理,每个请求按照访问IP的hash分配,这样同一个IP会固定访问同一个服务器,避免了服务器A创建了Session,第二次分发到服务器B的现象
  2. Session复制,每一台服务器上Session的变动(增加,删除,更新)都会广播到其他服务器
  3. 共享Session,每台服务器不将Session存在自己身上,而是存在一个共享的缓存中间件上(如redis)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值