存在理由?
http是无状态的,不会记住之前的操作,无法保持登录状态->登录后的操作需要继续登录
实现机制:
1)session+cookie:用户登录时,服务器会在服务器端创建一个session用于记录用户信息,并将session_id放在cookie里面返回给用户,cookie会保留在浏览器里面,之后再向浏览器发送请求时都要带上这个cookie,服务器读取cookie里面的session_id,然后查看当前所有有效的session中是否有这个session_id,来进行身份验证。
2)token:session需要存储在服务器,庞大的用户群将给服务器带来巨大的负担,因此有了token。token同样是由服务器发放,但是存储在客户端,通过对请求加密签名的形式来进行身份验证,服务器只需解密然后比对签名
异同点:
1)cookie和token都是存储在客户端,而session存储在服务器
2)cookie和session都可进行身份验证和会话跟踪,但是token只能进行身份验证。
3)session通过session_id验证身份,而token通过解密然后比对签名
补充:
session基本上都是配合cookie使用的,但是token可以不使用cookie。因为cookie每次发送消息都需携带,增加了负担,因此如果只需进行身份验证的话,token也可以存放在Redis或本地内存,发送请求时再写到请求头就可以了。
如果只使用cookie进行身份验证,那么每次发送请求都需要携带上用户名、密码等私密信息,很不安全。所以需要结合session,采用session_id进行身份验证。