Cookie 、Session、Token

Cookie与Session

    cookie :曲奇饼干(百度翻译)。cookie具体指的是一段小信息,它是服务器发送出来存储在浏览器上的一组键值对,下次访问服务器时浏览器会自动携带这些键值对,以便服务器提取有用信息。

    session : 当用户与服务器连接时,服务器给每个用户一个session,并设定其中内容。 这些session相互独立。服务器可以借此来辨别用户信息,进而提供个别服务。session有存在期限。   

   问:为什么会出现session?

   答:因为http协议是无状态的协议,那就无法判断来到服务器的这次请求和下一次请求是否是同一个用户发送的。

   问:session的生成方式?

   答:浏览器第一次访问服务器,服务器会创建一个session,然后同时为该session。生成一个唯一的会话的key,也就是sessionid,然后,将sessionid及对应的session分别作为key和value保存到缓存中,也可以持久化到数据库中,然后服务器再把sessionid,以cookie的形式发送给客户端。这样浏览器下次再访问时,会直接带着cookie中的sessionid。然后服务器根sessionid找到对应的session进行匹配;

还有一种是浏览器禁用了cookie或不支持cookie,这种可以通过URL重写的方式发到服务器;

简单来讲,用户访问的时候说他自己是张三,他骗你怎么办? 那就在服务器端保存张三的信息,给他一个id,让他下次用id访问。

问:cookie与session的区别?

  • cookie存放在客户的浏览器上,session的数据放在服务器上,当你用客户端浏览器发送请求时,服务器端会生成一个session,存储你的一些数据,并返回给客户端一个cookie用于存放sessionId,服务器端用这个cookie中的sessionId判断用户标志。
  • cookie不是很安全,别人可以通过分析存放在客户端的cookie进行cookie欺骗,考虑安全的话应该使用session
  • session会在一定期间保存在服务器上,当访问量增大的时候会使服务器的性能降低,考虑性能的话应该选用cookie
  • session很容易失效,用户体验很差
  • 单个cookie的数据不能超过4K,很多浏览器都设置单个站点存储的cookie最多不能超过20个,Session对象没有对保存数据量的限制,并可以保存更为复杂的类型

session与token

问:为什么会出现token?

答:首先session校验需要存储空间,而且session的传递一般通过cookie进行传递的,或者通过url重写的方式;而token而token在服务器是可以不需要存储用户的信息的,而token的传递方式也不限于cookie传递,当然,token也是可以保存起来的;

问:token的生成方式?

答:浏览器第一次访问服务器,根据传过来的唯一标识userId,服务端会通过一些算法,如常用的HMAC-SHA256算法,然后加一个密钥,生成一个token,然后通过BASE64编码一下之后将这个token发送给客户端;客户端将token保存起来,下次请求时,带着token,服务器收到请求后,然后会用相同的算法和密钥去验证token,如果通过,执行业务操作,不通过,返回不通过信息

问:session与token的区别?

  • token和session其实都是为了身份验证,session一般翻译为会话,而token更多的时候是翻译为令牌;

  • session服务器会保存一份,可能保存到缓存、文件、数据库;同样,session和token都是有过期时间一说,都需要去管理过期时间;

  • 其实token与session的问题是一种时间与空间的博弈问题, session是空间换时间,而token是时间换空间。两者的选择要看具体情况而定。虽然确实都是“客户端记录,每次访问携带”,但 token 很容易设计为自包含的,也就是说,后端不需要记录什么东西,每次一个无状态请求,每次解密验证,每次当场得出合法 /非法的结论。这一切判断依据,除了固化在 C/S 两端的一些逻辑之外,整个信息是自包含的。而 sessionid ,一般都是一段随机字符串,需要到后端去检索 id 的有效性。万一服务器重启导致内存里的 session 没了呢?万一 redis 服务器挂了呢?

  • 方案 A :我发给你一张身份证,但只是一张写着身份证号码的纸片。你每次来办事, 我去后台查一下你的 id 是不是有效。

    方案 B :我发给你一张加密的身份证,以后你只要出示这张卡片,我就知道你一定是自己人。就这么个差别

 


 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值