View on GitHub

Cycle263 Blog

Stay hungry, stay foolish.

cookie 是一个非常具体的东西,指的就是浏览器里面能永久存储的一种数据,仅仅是浏览器实现的一种数据存储功能。

cookie由服务器生成,发送给浏览器,浏览器把cookie以kv形式保存到某个目录下的文本文件内,下一次请求同一网站时会把该cookie发送给服务器。由于cookie是存在客户端上的,所以浏览器加入了一些限制确保cookie不会被恶意使用,同时不会占据太多磁盘空间,所以每个域的cookie数量是有限的。

session

http请求是无状态的,为了区分不同用户的登录状态,会在服务端生成一个session id,并随着请求一并带过来。但是,服务端保存session id既浪费内存空间,又缺乏可靠性,特别是在做了负载均衡的情况下,可扩展性成了大问题。

因此,服务端会给用户发放一个token 令牌,并用HMAC-SHA256算法或其他算法进行对称加密,将URL和时间戳、token三者融合进行加验签名,服务端不保存此token,用同样的方式做对比,来验证用户的登录状态。

token

正因为session验证存在的诸多问题,Token身份验证能解决其存在的大部分问题,并且登录验证一般使用https协议,以保证token的安全性。

每次HTTP请求的时候,客户端都会发送相应的Cookie信息到服务端。实际上大多数的应用都是用 Cookie 来实现Session跟踪的,第一次创建Session的时候,服务端会在HTTP协议中告诉客户端,需要在 Cookie 里面记录一个Session ID,以后每次请求把这个会话ID发送到服务器。

Session是保存在服务端,cookie保存在客户端

Session cookie
保存在服务端 客户端

参考资料

漫画详解JSON Web Token登录验证

JWT传递安全