写在前面:
发现学过的东西总是容易忘,再记录一下之前学过的,忘记的时候再回看一下
定义:
Cookie是客户端保存用户信息的一种机制,用来记录用户的一些信息。
Session是在无状态的HTTP协议下,服务端记录用户状态时用于标识
具体用户的机制。
Token是“令牌”,是用户身份的验证方式,最简单的token组成:uid
(用户唯一的身份标识)、time(当前时间的时间戳)、sign(签名,由token
的前几位+盐以哈希算法压缩成一定长的十六进制字符串,可以防止恶意
第三方拼接token请求服务器)。还可以把不变的参数也放进token,避免
多次查库。保存在客户端本地,移动端流通。
原理:
浏览器第一次访问服务器时会创建一个session对象并返回一个JSESSIONID
=ID的值,创建一个Cookie对象key为JSSIONID,value为ID的值,将这个Cookie
写回浏览器。浏览器在第二次访问服务器的时候携带Cookie信息JSESSIONID=ID的值,如果
该JSESSIONID的session已经销毁,那么会重新创建一个新的session再返回一个新的
JSESSIONID通过Cookie返回到浏览器
理解:
(1)当你一次访问服务器的时候,服务器会在内存中开辟一块空间,返回唯一一把打开
该空间的钥匙,再把这把钥匙返回到浏览器。
当你第二次访问的时候浏览器会携带这把钥匙到服务器端打开对应的空间,如果该空间
已经销毁又重新返回开辟一块新的空间返回新的钥匙到浏览器。
(2)客户端和服务端之间的通信交流,可以这样简单理解:
比如当你在个推技术分享沙龙上觉得某位讲师讲得很好,在会后问了他几个问题,他对你
这些问题进行了回答,这就是一个会话。但这个讲师太受欢迎,于是工作人员收集问题,
并给每个提问者一个号码牌,讲师按照号码牌依次给出相应解答并告诉相应的人。这就是
Session。一段时间后,当你再次遇见这位讲师,他发现你身上有上次回复你的答案,知晓
你是那个好学的程序猿。于是你欣喜若狂,哇塞,讲师居然认出我了,这就是Cookie,你
的小甜点。客户端好比听课的技术爱好者,服务端就是这位讲师。
总结:
Session和Cookie区别:
1、Cookie和Session都是会话技术,Cookie是运行在客户端,Session是运行
在服务器端。
2、单个Cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存
20个Cookie。(Cookie有大小限制,以及浏览器在存cookie的个数也有限制。)
3、Cookie有安全隐患,通过拦截或本地文件找得到你的cookie后可以进行攻击
。在安全性第一的前提下,选择Session更优。重要交互信息比如权限等就要放
在Session中,一般的信息记录放Cookie就好了。
4、session会在一定时间内保存在服务器上。当访问增多,会比较占用服务器的
性能。考虑到减轻服务器性能方面,应当使用COOKIE。
5. 用户验证这种场合一般会用 Session。因此,维持一个会话的核心就是客户端
的唯一标识,即Session ID。
session与token:
作为身份认证,token安全行比session好;
Session 认证只是简单的把User 信息存储到Session 里,因为SID
的不可预测性,暂且认为是安全的。这是一种认证手段。 而Token ,
如果指的是OAuth Token或类似的机制的话,提供的是认证和授权 ,
认证是针对用户,授权是针对App 。
其目的是让某App有权利访问某用户的信息。
token与cookie
Cookie是不允许垮域访问的,但是token是支持的, 前提是传输的用户认证
信息通过HTTP头传输;