Session、Cookie、Token

引言

当客户端请求服务端后,服务端接收到请求后做出判断,并将结果返回给客户端,这样呢,客户端就与服务端连接了一个独立的会话。
连接后,客户端与服务端就需要保持住这个会话,为了保持住会话就有了两种技术,分别是:CookieSession,而现在各位同学在实际项目中用到的最多的应该是 Token(令牌) 了吧,文章前大半段会讲 SessionCookie,后一小段会讲一讲 Token

企业级李姐:
你可以理解成一家超市搞消费次数满5次,每次消费不能低于100元送礼品活动,商家代表服务端,参与活动的用户代表客户端。
当有很多个用户都参与了活动后,商家怎么知道这个用户消费了几次,每次消费多少钱,那个用户消费了几次,每次消费多少钱呢?



一、Cookie

当一个客户端请求服务端后,会将用户的一些信息发送给客户端,这个数据会存放在客户端的浏览器中,并下次访问服务端的时候会将这个数据再次发送给服务端,

企业级李姐:
当用户第一次消费后呢,商家会发给用户一个小卡片,卡片上记录着用户的基本信息,比如说你的名字、手机号、一共消费了几次、每次消费多少钱,这样的话当你消费满五次,每次消费满100后商家就能确定你达到了活动的要求,并给你发送小礼品。



二、Session

Session 是当客户端请求服务端后,服务端会将用户的信息进行缓存,或者保存到数据库中,并生成一个唯一的 Key,也就是 SessionId,然后创建一个 Cookie,将这个 Key 保存到 Cookie 中发送给客户端,客户端下次请求,就直接通过这个 CookieSessionId 传给服务端,服务端拿到这个 SessionId 后,去缓存或数据库中去查询该 SessionId 对应的用户数据,并返回。

企业级李姐:
当用户第一次消费后呢,商家就不是采用发给用户一个小卡片了,而是将用户的信息呢,比如说用户的姓名、手机号等信息记录到小本本上,并告诉用户,下次买完商品直接报手机号我就能查到你的信息,并且给用户追加一次购买记录和本次消费多少钱。
这样的话商家就也能确定哪个用户达到了活动的要求,并给这个用户发送小礼品了。



三、Session 与 Cookie 的优劣与区别

1、存放位置的不同。
Session 是保存在服务端的,而 Cookie 是保存在客户端的。

2、安全性问题。
Session 是相对安全的,Cookie 是不安全的。
因为 Cookie 是将用户的数据保存在客户端,如果你设置了 Cookie 的时间的话,它会存放在你的硬盘中,下次再次请求服务端的时候会将这些信息发送给服务端,这些信息有一个标记,服务端知道这是一个 Cookie 的数据。
假如,有人将你的 Cookie 复制走,并保存在他电脑的浏览器中,那么他就相当于使用了你的身份进行做事情。
Session 的话其实也不是绝对安全的,因为创建一个 SessionId 以 Cookie 的方式保存在客户端,如果有人将你的这个 SessionId 复制走,也是会出现使用你的身份进行操作信息,不过如果服务端 Session 的时间过期了,这个 SessionId 也就无效了,所以对我们来讲,Session 更加的安全一些。

3、会话有效期的设置方式不一样。
Session 是将过期的时间存放在服务端,取决于服务端的设置,而 Cookie 的过期时间设置是在客户端,取决于客户端的设置,是可以进行篡改的。

4、占用资源的地方不同。
Session 因为是存放在服务端的,占用的是服务端的资源,而 Cookie 是保存在客户端的,占用的是客户端的资源。



四、Token(令牌)

上面我们已经了解了 SessionCookie,接下来要讲一下 Token(令牌),现在应该大多数的项目都是用 Token 技术来做用户的验证,我们先来看一下它的验证与实现大体步骤:
客户端请求服务端后,服务端将用户的信息(比如说用户的 ID)取出,然后使用一种加密算法对数据进行加密,然后将用户的信息的数据和加密后的数据**(签名)**都存放到 Token 中,并对 Token 设置过期时间,返回给客户端,等下次客户端再次请求的时候携带 Token,服务端对 Token 进行时间是否过期判断,并对用户的数据使用加密算法进行加密,加密后的数据跟签名进行对比,正确返回请求数据,失败则返回错误信息。



五、Token 与上述的 Session 和 Cookie 的优点

1、安全性 与 不占用服务端资源
Token 是放在了客户端那边,待下次客户端再次请求时使用加密算法对签名进行校验,并且由服务端设置了过期时间,一段时间后客户端需要重新生成 Token
Session 则是存放在了服务端,占用服务端资源。
Cookie 虽然是放在了客户端,但是安全性不高。


2、多平台跨域 与 可扩展性
Token 是存放在客户端的,如果我们是使用了负载均衡这种多服务器,或者多个平台相互串联,Token 都可以帮助我们实现这些。
Session 是存放在服务端的,如果我们将已验证的用户的信息保存在 Session 中,则每次请求都需要用户向已验证的服务器发送验证信息 (称为 Session 亲和性),用户量大时,可能会造成一些拥堵。




End


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值