cookie_session_token
Cookie
将用户标识信息保存在客户端,用于无状态的网页访问时检测人员、权限等,容易被伪造或者调用,所有的k-v均存在客户端。
Session
将用户标识信息保存在服务器,对于这一组信息生成一个秘钥session_id,session_id返回给浏览器后,浏览器将其放在Cookie中,这样本地不存储铭感k-v信息,通过session_id在服务器上进行验证并交换获取对应的k-v,一定程度上保证了信息不会泄露,虽然每次访问请求都有一些校验信息用于验证是否是前一个浏览器会话,但是依旧容易被伪造。
另外,由于Session存储在服务器,对于分布式集群应用,Session的同步问题会比较明显,甚至由于Nginx流量转发或者Keepalived等负载均衡技术的应用,很可能用户最初被分发到A服务器进行登录验证并返回session_id,但是在后续可能会被分发到B服务器,如果AB服务器并没有即时同步session_id,就会产生识别用户信息失败,需要重新登录的情况
Token
进入移动互联时代,移动端没有Cookie机制,所以将上述k-v通过秘钥加密后,返回给浏览器,浏览器每次携带此Token进行服务访问,浏览器通过私钥进行解密并分析。等于说虽然用户身份信息存储在Token中,而Token又必须用服务器上的秘钥才能进行解析,如果不知道秘钥,Token的内容就是安全的,那么这样就很好的解决的分布式session_id不能及时同步的问题,这种技术其实就类似结合了cookie的本地存储,又结合了服务器的解密运算,每台分布式服务器只要知道秘钥和算法就行了。
综上Cookie、Session、Token其实都是保持用户状态的技术,从Cookie出现保持了用户的身份状态,到为了不在Client明码存储显示而产生Session,后来分布式的发展和移动应用的兴起,又推动了Token的产生。本质上都是存用户相关K-V数据,只不过是存在哪,怎么存,解决什么问题,而一步步产生的解决办法而已。