相信每一个做过web开发的人,都或多或少用过或者听说过session、cookie,以及token以及JWT。有时候感觉很困惑,仿佛都是差不多的东西,这里就简单的对这几个概念做一个阐述。
首先必须要知道的是:
http协议是无状态的
什么是无状态呢?就是说这一次请求和上一次请求是没有任何关系,互不相识的。这种无状态的好处是快速,而坏处可想而知:用户发起登陆请求,成功后,发起另一个页面跳转请求,但因为无状态,服务器并不知道这个用户是不是已经登录过了,因此就只能再把这个请求重定向到登陆页面。
这样用户就疯了,破系统怎么一直让我登录。
session和cookie
所以,前辈们就想了一个办法,在第一次登录后,在服务器端产生一个会话id(sessionId),记录一下用户及其状态。然后把sessionId返回给浏览器。浏览器将这个sessionId记录到cookie里,之后的请求再把它带上。这样服务器从请求中拿到cookie里的sessionId,然后到自己的存储(一般是用redis)里查一下,得到用户的状态。接下来就可以畅通无阻了。
总之,
session是服务器端,cookie是浏览器端(用户端)
cookie只是实现session的其中一种方案。虽然是最常用的,但并不是唯一的方法。禁用cookie后还有其他方法存储,比如放在url中
现