You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何复用requests.Session()?解决多次创建会话导致连接失效问题

问题分析与解决:requests.Session会话维持失败

核心错误原因

你每次执行不同操作时都新建了LoginLogout类的实例:

  • 登录时创建的login_var是一个带登录状态的会话实例,但执行update时又新建了update_prem——这是一个完全独立的新会话,没有任何登录状态,自然返回登录页内容。
  • 你的思路是对的:用requests.Session维持会话,让同一会话内的请求共享Cookie等登录状态,但实现时没做到复用同一个会话实例。

修正方案

1. 复用同一个会话实例

把会话实例提升到全局或更高作用域,确保登录、更新、退出操作都用同一个实例:

# 全局管理会话实例,避免每次操作新建
session_instance = None

if switch_parameter == "login":
    session_instance = LoginLogout()
    session_instance.login(USER, PASSWORD, SERVER)
    # 这里可以直接用实例的会话对象验证,或者后续封装成类方法
    print('IS IT OK ?', session_instance.s.get('.../login...'))
elif switch_parameter == "start":
    start()
elif switch_parameter == "stop":
    stop()
elif switch_parameter == "update":
    if session_instance is not None:
        session_instance.update('...different/page...')
    else:
        print("请先完成登录")
elif switch_parameter == "logout":
    if session_instance is not None:
        session_instance.logout()
        session_instance = None  # 登出后清空实例
    else:
        print("当前未登录,无需退出")
else:
    pass

2. 优化类封装(可选,更规范)

把会话操作全部封装到类内部,避免外部直接访问self.s,同时增加登录状态判断:

import requests

class LoginLogout:
    def __init__(self):
        self.s = requests.Session()
        self._is_logged_in = False  # 私有变量标记登录状态

    def login(self, user, password, server):
        payload_data = {'user': user, 'pass': password, 'server': server}
        response = self.s.post(LOGIN_LINK, payload_data)
        # 根据实际响应判断登录是否成功,比如状态码、响应内容
        if response.status_code == 200:
            self._is_logged_in = True
        print(response)
        return self._is_logged_in

    def verify_login(self):
        response = self.s.get('.../login...')
        print('登录状态验证:', response)
        return response.status_code == 200

    def update(self, updt_link):
        if not self._is_logged_in:
            print("未登录,无法执行更新操作")
            return
        print(self.s.get(updt_link))

    def logout(self):
        if self._is_logged_in:
            response = self.s.get('...some webpage/user/logout...')
            self.s.close()
            self._is_logged_in = False
            print(response)
        else:
            print("当前未登录,无需退出")

调用优化后的类:

session_instance = None

if switch_parameter == "login":
    session_instance = LoginLogout()
    session_instance.login(USER, PASSWORD, SERVER)
    session_instance.verify_login()
elif switch_parameter == "update":
    if session_instance:
        session_instance.update('...different/page...')
    else:
        print("请先登录")
# 其他分支逻辑同理

内容的提问来源于stack exchange,提问作者BedSon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 00:20:27