直到最近,一切都很好,但现在我的网站不断给出“SESSION_COOKIE_NAME”和“NoneType”对象没有属性“修改”错误。但令人感兴趣的是,如果我更改代码,错误如何消失一段时间并不重要。请帮助知识渊博的人
这里是代码最重要的部分:
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)
# I'm also using part of code like this in my app
session["user_id"] = rows[0]["id"]
# or
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'
我只是没有尝试完全删除它并更改名称。登录帐户一段时间后会出现此问题,当尝试搜索站点时,它只是给出此错误而不是 POST 请求。
这个错误信息表明你的 Flask 应用在处理用户会话时遇到了问题,特别是当尝试访问或保存会话数据时。让我们一步一步地分解一下错误信息和可能的原因:
1. 弃用警告
DeprecationWarning: 'session_cookie_name' is deprecated and will be removed in Flask 2.3. Use 'SESSION_COOKIE_NAME' in 'app.config' instead.
这个警告提示你正在使用一个即将弃用的方法来获取会话 cookie 的名称。虽然它现在不会导致错误,但最好修正它以确保未来的兼容性。
解决方法:
将你的代码中所有使用
app.session_cookie_name
的地方替换为
app.config['SESSION_COOKIE_NAME']
。
2. 属性错误
AttributeError: 'NoneType' object has no attribute 'modified'
这个错误是主要问题。它表明在
flask_session
尝试保存会话时,
ctx.session
的值为
None
,这意味着此时没有可用的有效会话。
可能的原因和解决方案:
-
会话过期或无效: 检查你的
SESSION_PERMANENT
和PERMANENT_SESSION_LIFETIME
设置。如果会话过期或由于某种原因变得无效(例如,如果用户清除了他们的 cookies),ctx.session
将为None
。-
解决方案:
- 确保你的会话配置符合你的需求,特别是关于会话持续时间。
- 在你的代码中实现适当的错误处理机制,以便在会话不可用时优雅地处理这种情况(例如,将用户重定向到登录页面)。
-
解决方案:
-
会话存储问题: 你正在使用基于文件系统的会话存储(
app.config["SESSION_TYPE"] = "filesystem"
)。如果临时目录不可访问或磁盘空间不足,可能会导致问题。-
解决方案:
-
确保你的 Flask 应用有权写入
SESSION_FILE_DIR
指定的目录。 - 考虑使用更强大的会话存储机制,例如数据库或内存缓存,特别是对于生产环境。
-
确保你的 Flask 应用有权写入
-
解决方案:
-
cookie 被阻止: 一些浏览器或浏览器扩展可能会阻止设置 cookie,从而阻止会话的创建或恢复。
-
解决方案:
- 建议用户允许你的网站使用 cookie。
- 考虑使用替代的会话管理机制,如果 cookie 不是一个可行的选择。
-
解决方案:
调试建议:
- 启用日志记录: 在你的 Flask 应用中启用详细的日志记录,以获取有关会话处理过程中发生的事件的更多信息。
- 逐步调试: 使用调试器逐步执行你的代码,特别是在会话创建、访问和修改的点,以确定问题发生的位置。
- 检查会话数据: 在尝试访问会话数据之前,添加检查以查看会话是否存在且是否包含预期的数据。
通过遵循这些步骤,你应该能够确定你的 Flask 应用中出现“SESSION_COOKIE_NAME”错误和“NoneType”对象没有属性“modified”错误的根本原因并加以解决。
标签:python,flask,web,session,session-cookies From: 76015992