Session
Session是服务器端使用的一种记录客户端状态的机制。session销毁只能通过invalidate或超时(默认30分钟),关掉浏览器并不会关闭session。
客户端浏览器访问服务器的时候,服务器把客户端信息以类似于散列表的形式记录在服务器上,这就是Session。客户端浏览器再次访问时只需要从该Session中查找该客户的状态就可以了。
Cookie
Cookie是一种网络会话状态跟踪的技术。Cookie是由服务器生成,保存在客户端的一种信息载体。这个载体中存放着用户访问该站点的会话状态信息。Cookie是由若干键值对构成,键值对均为字符串。
过程:
(1)生成:用户在提交第一次请求后,由服务器生成Seession,将Sessionid赋值给浏览器Cookie,
(2)保存服务器将Cookie封装到相应头中,以相应的形式发送给客户端,客户端接收到这个响应后,将Cookie保存到客户端。
(3)使用:当客户端再次发送同类请求后,在请求中会携带保存在客户端的Cookie数据,发送到服务器,由服务器对会话进行跟踪。
来源:
会话是由一组请求与相应组成,是围绕着一件相关事情所进行的请求与相应。所以这些请求与相应之间已定是需要有数据传递的,即是需要进行会话状态跟踪的。HTTP协议是一种无状态协议,所以就需要Coolie进行请求间数据传递的会话跟踪。
token
token的意思是“令牌”,是用户身份的验证方式,最简单的token组成:uid(用户唯一的身份标识)、time(当前时间的时间戳)、sign(签名)。还可以把不变的参数也放进token,避免多次查库。
过程:
1、客户端将用户的账号和密码提交给服务器;
2、服务器对其进行校验,通过则生成一个 token 值返回给客户端,作为后续的请求交互身份令牌;
3、客户端拿到服务端返回的 token 值后,可将其保存在本地,以后每次请求服务器时都携带该 token,提交给服务器进行身份校验;
4、服务器接收到请求后,解析关键信息,再根据相同的加密算法、密钥、用户参数生成 sign 与客户端的 sign 进行对比,一致则通过,否则拒绝服务;
5、验证通过之后,服务端就可以根据该 Token 中的 uid 获取对应的用户信息,进行业务请求的响应。
Token 方案的特点
1、Token 可以跨站共享,实现单点登录;
2、Token 机制无需太多存储空间。Token 包含了用户的信息,只需在客户端存储状态信息即可,对于服务端的扩展性很好;
3、Token 机制的安全性依赖于服务端加密算法和密钥的安全性;
4、Token 机制也不是万金油。
Session 和Cookie的区别
1、Cookie数据存放在客户的浏览器上,Session数据放在服务器上。
2、Cookie不是很安全,别人可以分析存放在本地的Cookie并进行Cookie欺骗,考虑到安全应当使用Session。
3、Session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能
考虑到减轻服务器性能方面,应当使用Cookie。
4、单个Cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个Cookie。
5、客户端只保存sessionid到cookie中,而不会保存session
Session 和token的区别
1.身份认证token安全性比session好,因为每个请求都有签名还能防止监听以及重放攻击,而session就必须靠链路层来保障通讯安全了。