cookie
cookie是一种记录客户状态的机制,由服务器生成,发送给用户浏览器,存储在用户端浏览器,,下次请求同一网站时给服务器。
session
session也是一种记录客户状态的机制,不同的是cookie保存在客户端浏览器中,而session保存在服务器上。客户端浏览器访问
服 务器的时候,服务器把客户端信息以某种形式记录在服务器上,客户端浏览器再次访问时只需要从该Session中查找该客户的
状态就可以了。
token
令牌,是用户身份的验证方式。
- 一个Token就是一些信息的集合,在Token中包含足够多的信息,以便在后续请求中减少查询数据库的几率
- 服务端需要对cookie和HTTP Authrorization Header进行Token信息的检查
- 基于上一点,你可以用一套token认证代码来面对浏览器类客户端和非浏览器类客户端;因为token是被签名的,所以我们可以认为
- 一个可以解码认证通过的token是由我们系统发放的,其中带的信息是合法有效的
- 最简单的token组成:uid(用户唯一的身份标识)、time(当前时间的时间戳)、sign(签名)
cookie与session区别
- 存储位置不同:cookie数据存放在客户端上,session数据放在服务器上;
- 存储大小不同:单个cookie保存的数据<=4KB,一个站点最多保存20个Cookie;对于session来说并没有上限,但出于对服务器端的性能考虑,session内不要存放过多的东西,并且设置session删除机制。
- 存储方式不同:cookie中只能保管ASCII字符串,并需要通过编码方式存储为Unicode字符或者二进制数据;session中能够存储任何类型的数据,包括且不限于string,integer,list,map等。
- 有效期限不同:开发可以通过设置cookie的属性,达到使cookie长期有效的效果;session依赖于名为JSESSIONID的cookie,而cookie JSESSIONID的过期时间默认为-1,只需关闭窗口该session就会失效,因而session不能达到长期有效的效果。
session与token
- 生成方式:浏览器第一次访问服务器,根据传过来的唯一标识userId,服务端会通过一些算法,如常用的HMAC-SHA256算法,然后加一个密钥,生成一个token,然后通过BASE64编码一下之后将这个token发送给客户端;浏览器第一次访问服务器,服务器会创建一个session,然后同时为该session生成一个唯一的会话的key,也就是sessionid,然后,将sessionid及对应的session分别作为key和value保存到缓存中,也可以持久化到数据库中,然后服务器再把sessionid,以cookie的形式发送给客户端。
- 有无状态:session有状态;token无状态
- 是否存储:session要存储;token无存储
token与cookie
Cookie是不允许垮域访问的,但是token是支持的,前提是传输的用户认证信息通过HTTP头传输。
- token就是令牌,比如你授权(登录)一个程序时,他就是个依据,判断你是否已经授权该软件;
- cookie就是写在客户端的一个txt文件,里面包括你登录信息之类的,这样你下次在登录某个网站,就会自动调用cookie自动登录用户名;
- session和cookie差不多,只是session是写在服务器端的文件,也需要在客户端写入cookie文件,但是文件里是你的浏览器编号.Session的状态是存储在服务器端,客户端只有session id;而Token的状态是存储在客户端。