HTTP会话是指用户与网站的一次交互过程,用于保存用户信息和网站状态。由于HTTP协议是无状态的,所以需要借助Cookie和Session机制来实现会话管理。
会话管理常用方式有:
- Cookie:将用户信息保存在客户端,再发送到服务器,用于识别用户。但容易被伪造,不安全。
- Session:将用户信息保存在服务器,通过Session ID识别用户。Session会在用户访问网站时自动发送到客户端的Cookie中,再从中提取出Session ID从而找到对应的用户信息。Session相对安全,但会占用服务器资源。
- JWT(JSON Web Token):将用户信息生成加密签名的Token,发送给客户端保存,用户每次请求都带上此Token。服务器验证Token的有效性和完整性从而识别用户。JWT无需依赖Cookie和Session,轻量级但也面临伪造风险。
代码示例:
使用Session实现会话:
服务器生成Session:
py
session = {'username': 'john'}
session_id = uuid4() # 生成Session ID
SESSIONS[session_id] = session # 存储在服务器
发送Cookie中包含Session ID:
Set-Cookie: session_id=abc123
浏览器请求带上Cookie:
Cookie: session_id=abc123
服务器提取Session ID并获取用户Session:
py
session_id = request.cookies.get('session_id')
session = SESSIONS[session_id]
使用JWT实现会话:
服务器生成JWT:
py
import jwt
payload = {'username': 'john'}
jwt_token = jwt.encode(payload, SECRET_KEY) # 加密生成JWT
发送JWT到客户端:
Authorization: Bearer <jwt_token>
客户端请求带上JWT:
Authorization: Bearer <jwt_token>
服务器解密JWT并获取用户信息:
py
import jwt
payload = jwt.decode(jwt_token, SECRET_KEY)
username = payload['username']