django - get_expiry_age() 在 Django 中返回什么
问题描述
不是返回实际的剩余秒数,而是返回request.session.get_expiry_age()
设置的固定值=10 request.session.set_expiry(10).
在主页视图中:
request.session['var1']=1
request.session.set_expiry(10)
在视图2中:
print(request.session['var1'])
无论我刷新view2多少次,key not found
从上次调用主页视图的那一刻起,我都会在10秒内得到keyError。
这意味着会话确实会在调用主页视图后 10 秒后过期。
是否有任何其他内置函数可以显示每次调用 view2 时会话到期的实际秒数。
谢谢
解决方案
会话过期的语义存在细微差别,可以从以下文档中收集到set_expiry()
:
设置会话的到期时间。您可以传递许多不同的值:
- 如果
value
是整数,则会话将在几秒的不活动后过期。- 如果
value
是一个datetime
或timedelta
对象,会话将在该特定日期/时间到期。
换句话说,当您说 时set_expiry(10)
,您并不是说会话应该在 10 秒后过期,而是说会话应该在 10 秒不活动后过期。
并且由于get_expiry_age()
有一个modification
默认为 now 的参数,它总是会返回10
.
如果您希望会话在 10 秒后过期,您需要设置一个特定的datetime
or timedelta
:
from datetime import timedelta
request.session.set_expiry(timedelta(seconds=10))
如果你这样做,get_expiry_age()
应该按预期工作。
推荐阅读
- reactjs - 用于 redux-saga 中错误处理的打字稿
- python - 具有自定义键/比较功能的 Pandas groupby max
- flutter - 由于类型,无法生成 toJson 代码
- json - Powershell - 比特桶
- java - java.lang.VerifyError:验证程序被拒绝。拒绝调用,预期 36 个参数寄存器,方法签名有 37 个或更多
- grammar - 语法和语义错误之间的歧义
- leaflet - 使用 laravel mix 出现两次传单标记
- visual-studio-code - 将 git bash 添加到 VSCode 中的默认 shell 列表
- mongodb - 无法在 docker 容器中为 mongodb 日志设置卷
- php - symfony:分页+排序功能