我目前有一个使用cookie会话的django站点。我注意到会话是随机注销的。当调试这个时,我发现这是由于我的代码中的逻辑查看了会话的年龄。 然而,我随后注意到,在没有问题的时段内,Apache时间戳中显示的时间是正确的。但后来tiemstamp回到了5个小时后,我的Django程序认为会话已经过期并注销。在
下面是一个例子
[Wed Jul 31 16:12:45 2013] [error] DEBUG ok elapsed time 7
[Wed Jul 31 16:12:45 2013] [error] DEBUG ok elapsed time 1
[Wed Jul 31 10:12:46 2013] [error] DEBUG : request.user.is_authenticated()
[Wed Jul 31 10:12:46 2013] [error] DEBUG ok elapsed time 64809
[Wed Jul 31 10:12:46 2013] [error] DEBUG since begin . elapsedTime.seconds 64809
[Wed Jul 31 10:12:46 2013] [error] DEBUG request.session\\['deginRequest'\\]
[Wed Jul 31 10:12:46 2013] [error] DEBUG ok elapsed time 64801
[Wed Jul 31 10:12:46 2013] [error] DEBUG since last req . elapsedTime.seconds 64801
[Wed Jul 31 10:12:46 2013] [error] DEBUG request.session\\['lastRequest'\\]
[Wed Jul 31 10:12:47 2013] [error] DEBUG : shouldLogout
这个问题也会随机发生。有什么想法吗?在
这里还有Im使用的中间件(它生成这些日志)
^{pr2}$
这似乎是操作系统/硬件配置错误。在
我怀疑有些时候你的网络出现故障,操作系统需要从硬件时钟获取数据,而不是ntp。在
您应该确保BIOS时钟UTC配置与
/etc/default/rcS
参数匹配:另外,请确保时区配置正确:
^{pr2}$一些简单的测试:
UTC
参数。在hwclock
命令:样品:
Apache日志显示了一个非常离散的5小时时间步长,因此这不太可能是由时间保持守护进程(如ntp)进行的底层系统时间调整。我想这几乎肯定与时区设置有关。在
如果您使用mod wsgi以非守护程序模式为应用程序提供服务,那么环境中的进程之间可能存在共享状态。尤其要注意以下链接中的信息:https://code.google.com/p/modwsgi/wiki/ApplicationIssues#Timezone_and_Locale_Settings
正如其他答案中建议的那样,最好始终以UTC存储时间,并且只转换为特定的时区更新演示文稿。在
考虑在wsgi守护程序模式下运行应用程序。从mod_wsgi docs
守护程序模式确保您有一个独立的进程来处理您的应用程序,而不会受到其他wsgi进程的环境污染。例如TZ环境变量变化。在
这也许不能解决你的问题,但值得一提。把这些放在评论里看起来不太合适。在
使用可识别时区的datetime对象而不是天真的对象(
datetime.datetime.now()
提供了这一点)在处理日期/时间时使用}。在
datetime.datetime.utcnow()
,而不是{所以从django timezones
当django将存储在
request.session['beginSession']
中的时间从原始对象错误地转换为支持时区的对象时,可能会出现这种情况。在相关问题 更多 >
编程相关推荐