django会话的棘手问题:有时会话信息被删除

dbf*_*dbf 7 django django-sessions

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

UPD:我检查并看到在两个连续请求期间,使用的会话密钥没有改变,首先请求有一个实际的会话状态,而在第二个会话变量与空相关.

Ste*_*yne 4

作为调试此问题的一种方法,我将对标准 Django 会话中间件(或您当前正在使用的任何中间件)进行子类化:

django.contrib.sessions.middleware.SessionMiddleware

并包装process_request和(可能更重要的process_response是)一些额外的日志记录。然后在 Django 中安装子类会话中间件MIDDLEWARE_CLASSES,而不是普通的 Django 中间件。

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

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