什么是HTTP会话?如何实现HTTP会话?代码举例讲解

HTTP会话是指用户与网站的一次交互过程,用于保存用户信息和网站状态。由于HTTP协议是无状态的,所以需要借助Cookie和Session机制来实现会话管理。

会话管理常用方式有:

  1. Cookie:将用户信息保存在客户端,再发送到服务器,用于识别用户。但容易被伪造,不安全。
  2. Session:将用户信息保存在服务器,通过Session ID识别用户。Session会在用户访问网站时自动发送到客户端的Cookie中,再从中提取出Session ID从而找到对应的用户信息。Session相对安全,但会占用服务器资源。
  3. 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']