Session, Token和Cookie的区别

Posted 刘翾

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Session, Token和Cookie的区别相关的知识,希望对你有一定的参考价值。

文章目录

1. Session 与 Cookie的区别及关联关系

cookie数据存放在客户的浏览器上,session数据放在服务器上(不同容器, 不同框架存储的位置不同, 可能是内存, 可能是文件, 也可以持久化储存)

1.1. Cookie原理

Cookie可以用来记录用户的一些特殊信息, 如: 上次访问的位置, 页面样式表, 以及配合session和token用来验证信息等.

通过Set-Cookie响应头来设置Cookie, 字段中可以设置Cookie的值一些限制条件

  • Domain:域,表示当前cookie所属于哪个域或子域下面
  • Path:表示cookie的所属路径
  • Expire time/Max-age: 表示Cookie的过期时间
  • secure: 表示该cookie只能用https传输, 一般用于包含认证信息的cookie,要求传输此cookie的时候,必须用https传输
  • httponly:表示此cookie必须用于http或https传输。这意味着,浏览器脚本,比如javascript中,是不允许访问操作此cookie的

不同浏览器关于Cookie大小以及数量的限制各不相同, 但一般来说, cookie的大小最好不要超过4kb.

1.2. Session原理

Session用来跟踪每一个用户的会话, 可以使用sessionID来区分不同的用户, 以去做一些比如验证码, 或者特殊token的校验工作.

Session是以Cookie或URL(如果Cookie被禁用的话)来设置sessionID到客户端, 只要用户再次访问服务器时,带着session的id,服务器就会匹配用户在服务器上的session.

1.3. 总结

可以看到实际上并没有太明显的区别, 可以理解成一个整体, 互相辅佐

2. token

token和上面提到的Session或者Cookie也没有太明显的区别, 也是为了解决某种问题所创造出来的名词

token概念: 带有某种特殊意义的字符串

token所解决的问题:

  1. 为了防止每次登陆的时候, 后端频繁查库.
  2. 举两个例子: 如果session中保存着一些用户信息, 但服务器是集群的, 需要怎么做? 如果A 网站和 B 网站是同一家公司的关联服务。现在要求,用户只要在其中一个网站登录,再访问另一个网站就会自动登录, 又需要怎么做? 第一个问题我们可以采用session共享的方法, 第二个问题可以采用session数据持久化, 写入数据库. 不过缺点都是工作量比较大. 因此可以加密一段特殊的信息, 保存到客户端, 当用户发来请求时, 带上token, 服务端解密提取关键信息.2. 举两个例子: 如果session中保存着一些用户信息, 但服务器是集群的, 需要怎么做? 如果A 网站和 B 网站是同一家公司的关联服务。现在要求,用户只要在其中一个网站登录,再访问另一个网站就会自动登录, 又需要怎么做? 第一个问题我们可以采用session共享的方法, 第二个问题可以采用session数据持久化, 写入数据库. 不过缺点都是工作量比较大. 因此可以加密一段特殊的信息, 保存到客户端, 当用户发来请求时, 带上token, 服务端解密提取关键信息.
    token的写入可以采用cookie或者客户端手动保存到localstorage的形式.

下面的两个链接是介绍JWT(JSON WEB TOKEN)的, 有兴趣的可以看一看
http://www.ruanyifeng.com/blog/2018/07/json_web_token-tutorial.html
https://ninghao.net/blog/2834

以上是关于Session, Token和Cookie的区别的主要内容,如果未能解决你的问题,请参考以下文章

Token ,Cookie和Session的区别

Token ,Cookie和Session的区别

cookie session token 之间的区别

04-06 session,cookie,token 区别

session和cookie的区别

Cookie,Session和Token机制和区别.