Django: Срок действия файла cookie, срок действия которого истекает через 30 секунд, действительно истекает через 30 минут? - PullRequest
3 голосов
/ 06 апреля 2011

Это мой код:

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

Однако, если я затем проверю cookie «user_id» в Firefox, дата «Истекает» будет:

Tue Apr 5 23:50:07 2011

Что я делаю не так?

Ответы [ 3 ]

9 голосов
/ 06 апреля 2011

Вы можете использовать параметр max_age с количеством секунд вместо expires;он рассчитает expires для вас.Проблема с вашим datetime.now() может заключаться в том, что вы не используете UTC (вместо этого вы можете использовать datetime.utcnow()).

hr.set_cookie('user_id', user_id, max_age=30)

Мораль истории: прочитайте документацию ;он объясняет как вам нужно использовать объект UTC datetime, так и описывает max_age.

1 голос
/ 25 января 2016

Для тех, кто сталкивается с той же проблемой с подписанными куки, вы должны использовать get_signed_cookie() с атрибутом max_age.Я попытался установить его с помощью метода set_signed_cookie(), но это не сработает при повторной загрузке.

Так что ваш cookie не истечет:

cookie_max_age = settings.TWO_FACTOR_REMEMBER_USER_SECONDS
response.set_signed_cookie('key', max_age=cookie_max_age)

Но при его извлечении, как показано ниже, он должен работать (с и без установки max_age в cookie):

cookie_max_age = 3600
cookie = request.get_signed_cookie('key', max_age=cookie_max_age)
0 голосов
/ 06 апреля 2011

Попробуйте вместо этого:

hr.set_cookie('user_id', user_id, max_age=30)

Параметр max_age - это количество секунд, в течение которого cookie будет длиться.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...