欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 财经 > 创投人物 > Python中实现Session和Token

Python中实现Session和Token

2025/6/18 10:53:55 来源:https://blog.csdn.net/xjtlzl/article/details/148721094  浏览:    关键词:Python中实现Session和Token

Session和Token的区别

在Web应用和身份验证系统中,二者是用于管理用户状态和身份验证的两种常用机制。

Session是一种服务端存储用户状态的机制。当用户登录后,服务器会为该用户创建一个唯一的Session ID,通常存储在服务器的内存或数据库中。并通过Cookie或URL参数将Session ID发送给客户端。

其特点如下:

  • Session ID是用户与服务器之间的唯一标识;
  • 用户的状态信息(如登录状态、用户权限等)存储在服务端;
  • 客户端只需要保存Session ID,无需存储敏感信息;

Token为一种客户端存储用户身份信息的机制。用户登录后,服务器会生成一个包含用户身份信息的Token,并将其发送给客户端。客户端在后续请求中携带该Token,服务器通过验证Token来确认用户身份。

其特点如下:

  • Token包含用户身份信息(如用户ID、权限等),通常经过加密或签名。
  • Token存储在客户端(如Cookie、LocalStorage、Header等)。
  • 服务器无需存储用户状态,只需验证Token的有效性。

 

TOKEN获取代码示例:

import requests
import time
from typing import Optional, Dict, Anyclass TokenManager:def __init__(self, login_url: str, username: str, password: str):"""初始化Token管理器。:param login_url: 登录接口URL:param username: 用户名:param password: 密码"""self.login_url = login_urlself.username = usernameself.password = passwordself.token: Optional[str] = Noneself.token_expires_at: Optional[float] = None  # Token过期时间戳self.refresh_interval: int = 300  # 提前刷新Token的时间(秒),避免过期def _fetch_token(self) -> Dict[str, Any]:"""从登录接口获取Token。:return: 包含Token和过期时间的字典"""login_data = {"username": self.username,"password": self.password}response = requests.post(self.login_url, json=login_data)print(f"响应报文为:{response.text}")if response.status_code == 200:data = response.json()self.token = data["data"]["access_token"]# 假设API返回Token的过期时间(单位:秒)expires_in = data.get("expires_in", 3600)  # 默认1小时过期self.token_expires_at = time.time() + expires_in - self.refresh_intervalreturn {"token": self.token, "expires_at": self.token_expires_at}else:raise Exception(f"登录失败,状态码: {response.status_code}, 错误信息: {response.text}")def get_token(self) -> str:"""获取当前有效的Token,如果Token过期则自动刷新。:return: 有效的Token"""if self.token is None or time.time() >= self.token_expires_at:self._fetch_token()return self.tokendef refresh_token_if_needed(self) -> None:"""检查Token是否需要刷新,如果需要则刷新。"""if self.token is None or time.time() >= self.token_expires_at:self._fetch_token()if __name__ == "__main__":token_manager = TokenManager(login_url="https://skawms.sit.sf-express.com/api/sys/login",username="01369530",password="LF5/N2uYvtjjXWAO1ny8EBD1Df0pnUoFu5brpRONKXpru9/xQwSb+etPxY1r1RRlKUap8DrJa0Bw6jcUqyNu4tOuFIvXCjo2GjXkvK4UvYISl3XLKEaRkV96SMEu0ZW1bXWMynPu0Z5iF7qvZ457oMGDWP54VA/wnPmPsnYPtEU=")token = token_manager.get_token()print("Token:", token)

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词