get_expiry_age()在Django中返回什么

时间:2018-12-10 08:46:24

标签: django

request.session.get_expiry_age()不会返回剩余的实际秒数,而是返回在request.session.set_expiry(10).中设置的固定值= 10

在主页视图中:

request.session['var1']=1
request.session.set_expiry(10)

在view2中:

print(request.session['var1'])

无论我刷新view2多少次,从上一次调用主页视图起10秒钟,我都会得到keyError key not found

这意味着会话不会在调用主页视图后的10秒后过期。

是否还有其他内置函数可以显示每次调用view2时会话到期的实际剩余秒数。

谢谢

1 个答案:

答案 0 :(得分:1)

可以从set_expiry()的文档中了解到会话过期的语义有细微的区别:

  

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

     
      
  • 如果value是整数,则会话将在 秒钟的闲置时间 之后终止。
  •   
  • 如果valuedatetimetimedelta对象,则会话将在该 特定日期/时间 上终止。< / li>   

换句话说,当您说set_expiry(10)时,并不是说会话应该从现在开始10秒钟到期,而是说会话应该在10秒钟不活动之后到期。

并且由于get_expiry_age()具有默认为现在的modification参数,因此它将始终返回10

如果您希望会话从现在开始10秒钟过期,则需要设置特定的datetimetimedelta

from datetime import timedelta

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

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