我正在使用bottle.py和beaker.middleware.SessionMiddleware
编写应用程序:
如何修改session.timeout
和session.cookie_expires
值,以便我可以实施一个登录系统,将用户登录30天?
我已经实现了标准登录系统,所以一切正常,直到浏览器关闭,但如果用户选中记住我复选框,我想修改这些值。
如果用户选中记住我复选框,我想到了两个变体:
将session.cookie_expires
和session.timeout
设置为30天,但似乎我无法在运行时修改这些值,因为我收到的cookie在浏览器会话结束时到期,忽略我的运行时修改。
将session.timeout
设置为30天,并覆盖名为beaker.session.id
的Cookie,写入相同的会话ID但不同的到期日期。
但是从第1点开始的运行时问题仍然存在,似乎我无法访问我刚用烧杯创建的会话ID,所以我不知道在cookie中存储什么。
我该如何实现?
答案 0 :(得分:1)
我提出的唯一解决方案是实现我自己的小后端并自己设置cookie,而不是烧杯。
为了后人的缘故,代码在这里:
https://github.com/paulbarbu/bottle-upload/blob/master/index.py
方法:login_bl
,upload_view(db)
,is_logged_in
和logout()
。
请注意,这是一些非常旧的代码,并没有准备好生产,使用风险自负,上面链接的一些代码片段如下:
登录:
@post('/login')
def login_bl(db):
import hashlib
nick = request.forms.nick.lower()
password = hashlib.sha1(request.forms.password).hexdigest()
message = {}
error = None
uid = get_user_id(db, nick, password)
if uid:
sess = request.environ.get('beaker.session')
sess['uid'] = uid
# .... do other stuff for the logged in user
注销:
@get('/logout')
def logout():
if not is_logged_in():
redirect('/login')
else:
sess = request.environ.get('beaker.session')
sess.delete()
return template('logout.tpl')
用户是否已登录?
def is_logged_in():
'''Check whether the user sent a cookie that holds a Beaker created
session id
'''
sess_id = request.cookies.get('beaker.session.id', False)
if not sess_id:
return False
sess = request.environ.get('beaker.session')
if 'uid' not in sess:
return False
return True