3

我无法访问session_key我的自定义 Django 中间件。我尝试使用以下方式访问它:

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.SessionMiddlewaresettings.py

我可以在中间件中设置会话密钥,但似乎 session_key 仅在显示完整页面后才生成/可访问。因为当页面第一次显示时{{ request.session.session_key }}返回None到我的模板中。当我刷新页面时,我可以看到session_key. 任何关于我如何访问的提示session_key都非常受欢迎。

4

2 回答 2

5

我设法让它工作。事实证明,通常只有在呈现完整页面后才会保存会话。

我设法使用以下方法过早地将会话保存在我的中间件中:

request.session.save()

然后我可以保存我的模型(注意会话后的 _id,在我的情况下,它允许您仅使用整数或 varchar 设置外键):

visitor = Visitor()
visitor.session_id = request.session.session_key
visitor.save()
于 2012-05-18T16:45:31.847 回答
1

我能够通过以下方式做到这一点,它对你有用吗?

Session.objects.get(session_key=request.session.session_key)

如果不是,也许@ilvar 是正确的,您尝试在会话处于活动状态之前访问它。

于 2012-05-18T15:56:31.787 回答