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

Flask登录一段时间后出现SESSION_COOKIE_NAME及NoneType属性异常求助

Flask会话警告及NoneType错误排查与解决

问题概述

Flask站点此前运行正常,近期频繁触发SESSION_COOKIE_NAME弃用警告,以及'NoneType' object has no attribute 'modified'错误。修改代码后错误会暂时消失,但一段时间后复现,且仅在用户登录一段时间后执行POST请求(如搜索)时触发。

核心代码片段

import os
import plotly.express as px
import cs50
import pandas as pd
import json
import plotly
import requests
from dotenv import load_dotenv
from cs50 import SQL
from flask import Flask, flash, redirect, render_template, request, session, jsonify, url_for
from flask_session import Session
from tempfile import mkdtemp
from werkzeug.security import check_password_hash, generate_password_hash
from datetime import datetime
from plotly.graph_objs import Figure, Scatter

from helpers import apology, login_required, lookup, usd

# Configure application
app = Flask(__name__)

load_dotenv()

# Configure session to use filesystem (instead of signed cookies)
app.config["TEMPLATES_AUTO_RELOAD"] = True

app.config["SESSION_TYPE"] = "filesystem"
app.config["SESSION_FILE_DIR"] = mkdtemp()
app.config["SESSION_PERMANENT"] = False
app.config["SESSION_USE_SIGNER"] = True
app.config["SECRET_KEY"] = os.urandom(24)
app.config["SESSION_COOKIE_NAME"] = 'session_cookie_name'

Session(app)

# 会话使用示例
# session["user_id"] = rows[0]["id"]
# user_id = session["user_id"]

if __name__ == '__main__':
    app.run()

错误日志

Traceback (most recent call last):
  File "/usr/local/lib/python3.11/site-packages/flask/app.py", line 2527, in wsgi_app
    ctx.push()
  File "/usr/local/lib/python3.11/site-packages/flask/ctx.py", line 375, in push
    self.session = session_interface.open_session(self.app, self.request)
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/flask_session/sessions.py", line 329, in open_session
    sid = request.cookies.get(app.session_cookie_name)
                              ^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/flask/app.py", line 287, in session_cookie_name
    warnings.warn(
DeprecationWarning: 'session_cookie_name' is deprecated and will be removed in Flask 2.3. Use 'SESSION_COOKIE_NAME' in 'app.config' instead.

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/local/lib/python3.11/site-packages/flask/app.py", line 1847, in finalize_request
    response = self.process_response(response)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/flask/app.py", line 2343, in process_response
    self.session_interface.save_session(self, ctx.session, response)
  File "/usr/local/lib/python3.11/site-packages/flask_session/sessions.py", line 353, in save_session
    if session.modified:
       ^^^^^^^^^^^^^^^^
AttributeError: 'NoneType' object has no attribute 'modified'

解决方案

1. 修复flask-session版本兼容性

当前使用的flask-session版本未适配Flask 2.3+的配置变更,导致读取app.session_cookie_name属性时触发弃用警告,进而引发会话初始化失败,最终导致save_session时session对象为None。

  • 执行升级命令:
    pip install --upgrade flask-session
    

2. 修正会话存储目录配置

使用mkdtemp()创建的临时目录会被系统自动清理,导致会话文件丢失,引发会话读取失败。需改为固定持久目录:

# 替换原SESSION_FILE_DIR配置
app.config["SESSION_FILE_DIR"] = os.path.join(os.path.dirname(__file__), 'sessions')
# 确保目录存在,避免启动报错
os.makedirs(app.config["SESSION_FILE_DIR"], exist_ok=True)

3. 规范会话配置项

确保所有会话配置使用大写命名规范,同时避免动态生成SECRET_KEY(每次重启会导致现有会话失效):

app.config.update(
    SESSION_TYPE="filesystem",
    SESSION_PERMANENT=False,
    SESSION_USE_SIGNER=True,
    # 从环境变量读取固定密钥,而非每次生成
    SECRET_KEY=os.getenv("SECRET_KEY", os.urandom(24)),
    SESSION_COOKIE_NAME='flask_session',
    TEMPLATES_AUTO_RELOAD=True
)

4. 添加会话异常兜底处理

在请求钩子中捕获会话初始化异常,避免请求崩溃:

@app.before_request
def handle_session_error():
    try:
        # 触发会话初始化
        session.get('user_id')
    except Exception:
        # 重置无效会话,引导用户重新登录
        session.clear()
        return redirect(url_for('login'))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 19:14:59