Я использую бутылку и стакан для управления сессиями с помощью Python.Я создал веб-сервис WSGI и настроил сеанс beaker следующим образом:
session_opts = {
'session.type': 'memory',
# 'session.cookie_expires': 43200,
'session.auto': True,
'session.secure': True,
'session.timeout': 1800,
'session.httponly': True,
'session.validate_key': 'test',
'session.cookie_expires' : True
}
app = beaker.middleware.SessionMiddleware(bottle.app(), session_opts)
bottle.run(app=app)
Мне нужно, чтобы сеанс завершался при закрытии браузера И когда истек общий срок службы файлов cookie.Тем не менее, они оба контролируются session.cookie_expires.Установка его в True завершает сеанс при закрытии браузера, установка в 43200 дает 12-часовой срок службы.Раскомментирование 'session.cookie_expires': 43200, приведет к 'session.cookie_expires': True игнорируется.
Я не уверен, как заставить их обоих работать.Вот блок документации по этой опции конфигурации:
cookie_expires (необязательно, bool, datetime, timedelta, int) Определяет, когда истечет срок действия файлов cookie, используемых для отслеживания клиентской части сеанса.Если задано логическое значение, срок его действия истекает в конце сеанса браузера или никогда не истекает.Установка даты и времени приводит к жесткому завершению времени сеанса (обычно используется для установки даты сеанса на далекую дату).Установка целого числа приведет к истечению срока действия файла cookie в течение стольких секунд.Т.е. значение 300 приведет к истечению срока действия файла cookie через 300 секунд.По умолчанию никогда не истекает.
Мое разрешение: Я сохранил 'session.cookie_expires': True и добавил следующий код для обработки общего срока службы:
now = datetime.datetime.now().strftime('%s')
delta = int(now) - int(request.session['_creation_time'])
if(delta > 43200):
request.session.delete()
return redirect('/login')