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所解决的问题:
- 为了防止每次登陆的时候, 后端频繁查库.
- 举两个例子: 如果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的区别的主要内容,如果未能解决你的问题,请参考以下文章