Я искал подобное решение.Я использую bottle-cork.py для аутентификации пользователя, и мне нужен был способ дать пользователям опцию «Держать меня в системе»
from bottle, import request, response # etc...
def post_get(name, default=''):
return bottle.request.POST.get(name, default).strip()
def login():
"""Authenticate users"""
username = post_get('username').lower()
password = post_get('password')
keep_login = post_get('keep_login')
session = request.environ['beaker.session']
if keep_login == 'true':
session.cookie_expires = False
response.set_cookie('keep_login', "true")
else:
session.cookie_expires = True
response.set_cookie('keep_login', "false")
aaa.login(username, password)
Однако каждый раз, когда запрос отправляется на сервер, бутылкавозвращает новый файл cookie сеанса, который по умолчанию возвращается к истечению, когда браузер закрывается.Чтобы исправить это, я добавил функцию, которую я вызываю при каждой отправке запроса:
def preserve_cookie(request):
keep_login = request.get_cookie('keep_login')
session = request.environ['beaker.session']
if keep_login == 'true':
session.cookie_expires = False
return request
Так, например:
@bottle.get('/get_username')
def check_login(user=None):
try:
aaa.require(username=user)
except:
raise bottle.HTTPError(401)
preserve_cookie(request)
return aaa.current_user.username
Таким образом, новый возвращаемый файл cookie сохраняетпредпочтение пользователя сохранять сеанс входа в систему.Тем не менее, способ beaker.SessionMiddleware в настоящее время реализован, он просто устанавливает срок действия файла cookie 18 января 2038 года.