我正在寻找类似的解决方案。我使用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设置为2038年1月18日过期。
您是否在问如何更改会话cookie的到期?如果是这样,你需要告诉我你正在使用的会话工厂。 – 2012-01-04 22:55:47
'pyramid_beaker.session_factory_from_settings'和'session.type = cookie' – 2012-01-04 23:01:03
烧杯的cookie默认为永不过期,所以也许你正在调试错误的东西? – 2012-01-04 23:04:36