gpt4 book ai didi

Django 基于文件的 session 不会过期

转载 作者:行者123 更新时间:2023-12-04 05:49:55 25 4
gpt4 key购买 nike

我刚刚意识到当我使用基于文件的 session 引擎时,我的 session 不会过期。查看基于文件的 session 的 Django 代码,Django 不存储 session 的任何过期信息,因此它永远不会过期,除非 session 文件被手动删除。

这对我来说似乎是一个错误,因为数据库支持的 session 工作正常,我相信无论后端开发人员选择什么 session ,它们都应该表现得相似。

切换到数据库支持的 session 对我来说不是一个选项,因为我需要将用户的 session 存储在文件中。

任何人都可以点亮一些灯吗?
这真的是一个错误吗?
如果是,你如何建议我解决它?

谢谢!

最佳答案

所以看起来你是对的。至少在 Django 1.4 中,使用 django.contrib.sessions.backends.file完全忽略 SESSION_COOKIE_AGE .我不确定这是否真的是一个错误,或者只是没有记录。

如果你真的需要这个功能,你可以基于 contrib 中的文件后端创建你自己的 session 引擎,但使用到期功能扩展它。

开通 django/contrib/sessions/backends/file.py并添加以下导入:

import datetime
from django.utils import timezone

然后,在 load 中添加两行方法,使其显示如下:
def load(self):
session_data = {}
try:
session_file = open(self._key_to_file(), "rb")
if (timezone.now() - datetime.datetime.fromtimestamp(os.path.getmtime(self._key_to_file()))).total_seconds() > settings.SESSION_COOKIE_AGE:
raise IOError
try:
file_data = session_file.read()
# Don't fail if there is no data in the session file.
....

这实际上将比较 session 文件上的最后修改日期以使其过期。

将此文件保存在您的项目中的某个位置并将其用作您的 SESSION_ENGINE而不是 'django.contrib.sessions.backends.file'
您还需要启用 SESSION_SAVE_EVERY_REQUEST如果您希望 session 基于不事件而超时,请在您的设置中。

关于Django 基于文件的 session 不会过期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10197880/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com