首先:
http本身无状态,说白了就是不保存任何用户信息,所以引入cookie(客户端方案)、session(服务端方案)来保存用户信息
Token:
服务端生成得一串字符串,作为客户端请求得一个令牌,每次登录时,服务器生成一个Tocken返回客户端,以后客户端带上tocken访问数据,无需拿用户名密码。
工作原理:
用户提供凭据(例如用户名密码)进行身份验证;
服务器验证凭据,并在验证通过后生成一个token;
服务器将Token发送给客户端(通常在http响应中的头部或响应体中)
客户端保存Token,并在后续的请求中将其发送个服务器
服务器接收到请求后,验证token,如果验证通过允许用户访问资源
Token位置:
http请求头内:
在http请求和响应中,可以在“Authorization”或“Access-Control-Token”头部字段中包含令牌。
GET /api/userinfo HTTP/1.1
Host: example.com
Authorization: Bearer YOUR_TOKEN_HERE
cookie内:
GET /index.html HTTP/1.1
Host: www.example.com
Cookie: session_token=YOUR_TOKEN_HERE; username=JohnDoe
请求参数GET/POST类型
POST /api/login HTTP/1.1
Host: example.com
Content-Type: application/json
{
"username": "johndoe",
"password": "secret",
"token": YOUR_TOKEN_HERE
}
隐藏在提交的表单中
POST /api/login HTTP/1.1
Host: example.com
Content-Type: application/x-www-form-urlencoded
username=johndoe&password=secret&token=YOUR_TOKEN_HERE
目的:
减轻服务器压力,减少频繁得查询数据库,使服务器更加健壮
优点:
扩展性强,安全
应用:
防止表单重复提交,anti csrf攻击(跨站点请求伪造),身份验证(单点登录)
GPT:
Tocken是一种无状态得身份验证机制(无状态stateless是指:进行通信时不会在服务器端保存客户端得任何状态信息,每次请求多是独立得,服务器不能从之前得任何请求中得到当前请求得信息;有状态stateful:进行通信时会在服务器端保存客户端得状态信息,例如session,有状态得存储机制)
session(会话):
一种有状态得服务器端机制,跟踪用户和服务器端得交互状态。当用户首次访问服务器时,服务器会为其创建一个唯一得sessionId,并将该Id以cookie得形式发送给客户端保存,客户端每次发送请求时,都会带上session Id,服务器根据该id识别用户并维持该用户得状态。服务端可以在session中存储用户相关得数据,数据存储在服务器上,用户无法直接访问,存储大得数据比cookie合适
cookie (HTTP cookie)
存储在客户端(浏览器)上得小型文本文件,由服务器通过HTTP相应头部发送给客户端,然后客户端将其保存在本地,每次客户端向服务器发送请求时,会自动将cookie附加到http请求头中发送给服务器。cookie通常用于记录用户得身份认证信息和保存一个用户偏好设置,
对象:
针对每一个网站的信息,每个网站对应一个,其他网站无法访问,每次访问网站,浏览器会查找该网站的cookie,有将文件发送出去,
包含的信息:
名称(name):指定了cookie的唯一标识符;
值(value):存储在cookie中的数据;
过期时间(Expires):可设置,不设置关闭浏览器自动过期;
path:指定cookie可以在那些路径下使用;
Domain:指定了那些子域可以访问cookie。格式通常为“.xxx.com”,其中“xxx”为顶级域名;
Secure:设置了只能用使用https协议才能访问cookie
HttpOnly:如果cookie中设置了HttpOnly属性,那么通过JavaScript脚本将无法读取cookie信息
- Cookie是存储在客户端的小型文本文件,用于记录用户的身份认证信息和保存一些偏好设置。
- Session是一种服务器端的机制,用于跟踪用户与服务器之间的交互状态,服务器端存储Session数据。
- Token是一种无状态的身份验证机制,用于在客户端和服务器之间进行身份验证和授权,不需要在服务器端存储会话信息。