Session是HTTP协议无状态性所导致的一种解决方案。它通过在服务端存储用户信息来跟踪用户状态。
实现Session跟踪主要有两种方式:
- 客户端存储:在客户端存储Session id,并在每次请求中携带,服务端根据Session id查找用户信息。这种方式Session id可能被盗用,安全性较低。
- 服务端存储:服务端在用户首次登录成功后生成Session id,并将其存入服务端文件或数据库。在每次请求中用户携带Session id,服务器就可以验证用户身份并获取用户信息。这种方式安全性高 but 需要服务端存储用户Session信息和状态,会占用一定资源。
代码示例:
服务器使用文件存储Session:
python
import time
import os
session_path = 'sessions'
def generate_session_id():
return str(time.time())
def save_session(username, session_id):
file_path = os.path.join(session_path, session_id)
with open(file_path, 'w') as f:
f.write(username)
def get_user_by_session_id(session_id):
file_path = os.path.join(session_path, session_id)
if os.path.exists(file_path):
with open(file_path) as f:
username = f.read()
return username
用户首次登录时生成Session:
python
username = 'Jack' # 获取用户名
session_id = generate_session_id()
save_session(username, session_id)
用户携带Session访问服务器:
python
session_id = '1234' # 用户携带Session
username = get_user_by_session_id(session_id)
print(username) # Jack
服务器就可以根据Session id识别用户身份和获取用户信息。