这是我的代码:
def update_session(request):
if not request.is_ajax() or not request.method=='POST':
return HttpResponseNotAllowed(['POST'])
user_id = request.POST.get('u')
hr = set_terminal_cookie(user_id)
return hr
def set_terminal_cookie(user_id):
print 'set_terminal_cookie'
hr = HttpResponse('ok')
print datetime.datetime.now()
expiry_time = datetime.datetime.now() + datetime.timedelta(seconds=30)
print expiry_time
hr.set_cookie('user_id', user_id, expiry_time)
return hr
以下是日志输出:
set_terminal_cookie
2011-04-05 23:16:36.706624
2011-04-05 23:17:06.706806
但是,如果我检查Firefox中的'user_id' cookie,则'Expires'日期为:
Tue Apr 5 23:50:07 2011
我哪里做错了?
4条答案
按热度按时间kyxcudwk1#
您可以使用带有秒数的
max_age
参数,而不是使用expires
;datetime.now()
的问题可能是您没有使用UTC(您可以使用datetime.utcnow()
)。故事的寓意:阅读文档;它解释了您需要使用UTC
datetime
对象并描述了max_age
。ds97pgxw2#
对于那些在签名cookie中遇到同样问题的人,你必须使用
get_signed_cookie()
和max_age
属性。我试着用set_signed_cookie()
方法设置它,但是当再次获取它时,它不起作用。因此,这不会使您的cookie过期:
但是当像下面这样获取它时,它应该可以工作(在cookie上设置和不设置
max_age
):zqdjd7g93#
请尝试:
max_age参数是您希望cookie持续的秒数。
z2acfund4#
在Django中,你可以设置max_age参数。在Django 4.1中,max_age应该是一个timedelta对象,一个整数秒数,或者如果cookie只在客户端的浏览器会话中存在,则为None(默认值)。如果没有指定expires,则会计算它。