cookie
因为http协议是无状态的,因此服务器无法确定是哪个用户给他发送了请求。cookie就解决了这个问题。cookie实际上是name-value的键值对,他们需要经过url编码。当浏览器向服务器发送请求的时候,服务器发送的响应里面就有一个set-cookie的响应头来通知服务器将set-cookie里面的值存储到浏览器。当再发送请求的时候,浏览器发送的请求头中会有一个cookie包含着存储的信息,这样服务器拿到请求之后就会知道是那个用户对他发送请求并返回相应的信息。cookie的数据是存储在浏览器端。 cookie分为会话cookie和持久cookie;如果不设置过期时间,那么会话结束,cookie就会消失。如果设置了过期时间,那么cookie会保存在硬盘中,当再次登录发送请求的时候还可以拿到cookie。设置记住密码的功能就可以使用永久cookie。直到到达过期时间。
session
session和cookie是相互联系的,当客户端向服务器发送请求之后;服务器会在创建相应的session,并且返回相应的sessionid(在set-cookie中携带)。sessionid会存储到cookie中,并记录对应的域。当再次发送请求的时候,请求头中带有cookie(包含了sessionid)。然后服务器通过读取cookie获得sessionid,在session中找到对应的用户信息。session的数据维护在服务器。 所以当很多请求的时候,会消耗很多服务器的空间来创建来维护session。
cookie和session的区别:
1、cookie数据存储在客户端,session数据存储在服务器端 2、session相对于cookie更安全,当然cookie也可以进行加密。 3、单个cookie存储的数据有限,不能超过4k
token
token也叫做令牌,是通过加密得到的标识。当客户端向服务器发送请求的时候,服务器会通过加密的方式生成一个唯一标识token,发送给客户端。客户端会存储起来,当再次发送请求的时候,会在请求头Authorization加上token值。因为不依靠cookie来进行发送,所以Token就不受cookie同源策略的影响,可以实现跨域。token相较于session的最大的好处是数据不再维护在服务器端,实现了服务器的无状态化。
token和session的区别
1、token的数据不像session一样维护在服务器端,实现了服务器的无状态化。 2、token可以实现跨域,而session不可以 3、token可以存储在cookie、localstorage中,而session只能存储在cookie中。
jwt(josn web token)
jwt其实也是token的一种,但是它相对于普通的token而言减少了对数据库的访问次数。服务器得到token之后会进行解析,然后会去数据库对信息进行验证。而jwt可以用密钥进行验证,所以就减少了对数据库的请求。