django - Django session : sometimes session information is erased 的棘手问题

标签 django django-sessions

我的应用程序中的 django session 有一个奇怪的错误:有时(每天约 10 次,大约 20000 次)用户的 session 信息被删除。我通过日志文件跟踪它:在页面 A 有用户 session 的信息,在他提交表单之后,在下一页他的 session 是空的。我尝试了两种类型的存储:memcached+db 和 db only,这个问题是针对它们的。我试图重现这些场景,但一切都按预期进行,正如我所说,这种情况很少发生。我还检查了不同用户是否存在此问题,并且对于他们来说每次都不会重现。我没有任何想法如何捕捉根本原因,我不知道这里还有什么作为描述发布。如果有人有任何想法,请告诉我。如果这很重要,我正在使用 django 1.2 + FastCGI 运行我的应用程序。
谢谢!

UPD:我检查并看到在两个连续请求期间使用的 session key 没有改变,第一个请求有一个实际的 session 状态,第二个 session 变量与空相关。

最佳答案

作为调试这个问题的一种方法,我将标准的 Django session 中间件(或您当前使用的任何东西)子类化:
django.contrib.sessions.middleware.SessionMiddleware
并包装 process_request和(可能更重要)process_response在一些额外的日志记录中。然后在 MIDDLEWARE_CLASSES 中安装您的子类 session 中间件,而不是股票 Django 之一。

您还可以验证 session.save()实际上已经通过尝试回读它来提交其更改。问题可能在于 session 状态序列化,并且在您尝试存储的特定键或值上失败。

这些都不能解决您的问题,但它可能会帮助您确定发生了什么。

关于django - Django session : sometimes session information is erased 的棘手问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14061866/

相关文章:

python - 如何在 Django 中处理多种用户类型

django - 如何处理上传文件的临时存储

django-sessions - 在 Django 中,如何找到当前登录用户的所有其他事件 session ?

python - 在 django 中通过 SSO + OpenID 对 Google Apps 自定义域的用户进行身份验证

django - 法语翻译以复数形式提出 "ValueError(' 无效标记 : %s' % value)"

python - Django 抛出 ValueError : too many values to unpack (expected 2) with no change to the code

Django/Auth : logout clears the session data?

python - 我如何遍历结果并将它们存储在列表中,以便我可以在我的 Django 模板中使用它们

django - 抑制 django 的 login_required 装饰器中的 "?next=blah"行为

session - 用于 Django 中缓存 session 的 Redis 复制