首页 > 解决方案 > 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 时会话到期的实际秒数。

谢谢

标签: django

解决方案


会话过期的语义存在细微差别,可以从以下文档中收集到set_expiry()

设置会话的到期时间。您可以传递许多不同的值:

  • 如果value是整数,则会话将在几秒的不活动后过期。
  • 如果value是一个datetimetimedelta对象,会话将在该特定日期/时间到期。

换句话说,当您说 时set_expiry(10),您并不是说会话应该在 10 秒后过期,而是说会话应该在 10 秒不活动后过期。

并且由于get_expiry_age()有一个modification默认为 now 的参数,它总是会返回10.

如果您希望会话在 10 秒后过期,您需要设置一个特定的datetimeor timedelta

from datetime import timedelta

request.session.set_expiry(timedelta(seconds=10))

如果你这样做,get_expiry_age()应该按预期工作。


推荐阅读