【发布时间】:2012-05-17 18:07:06
【问题描述】:
我无法在我的自定义 Django 中间件中访问 session_key。我尝试使用以下方式访问它:
session = Session.objects.get(pk=request.session._session_key)
或
session_key = request.COOKIES[settings.SESSION_COOKIE_NAME]
session = Session.objects.get(pk=session_key)
我得到错误:
Session matching query does not exist.
我已将中间件放在MIDDLEWARE_CLASSES 的末尾和django.contrib.sessions.middleware.SessionMiddleware 之后的settings.py 文件中。
我可以在中间件中设置会话密钥,但似乎 session_key 仅在显示完整页面后才生成/可访问。因为第一次显示页面时{{ request.session.session_key }} 在我的模板中返回None。当我刷新页面时,我会看到session_key。非常欢迎任何有关如何访问session_key 的提示。
【问题讨论】:
-
你为什么要做那个查询?为什么不直接访问
request.session? -
我有一个引用 django_session 表的表,例如: session = models.ForeignKey(Session) 当我创建它的实例时,例如使用 request.session 它给了我以下错误:无法分配“
”:“Visitor.session”必须是“Session”实例。这就是为什么我试图查询会话表以获取“会话”实例。 -
您在访问数据库时是否真的有会话密钥?仅在会话中间件上的
process_response中创建新会话 - 因为它们需要存储视图中的任何内容,并且在视图完全处理之前无法执行此操作。