Python 烧杯作为会话中间件
我正在使用瓶子.py和烧杯.middleware.SessionMiddlewarePython 烧杯作为会话中间件,python,bottle,beaker,Python,Bottle,Beaker,我正在使用瓶子.py和烧杯.middleware.SessionMiddleware编写一个应用程序: 如何修改会话.timeout和会话.cookie\u expires值,以便实现一个登录系统,让用户登录30天 我已经实现了标准的登录系统,所以在浏览器关闭之前一切都可以正常工作,但是如果用户选中“记住我”复选框,我想修改这些值 如果用户选中“记住我”复选框,我想到了两种变体: 将session.cookie\u expires和session.timeout设置为30天,但我似乎无法在运行
编写一个应用程序:
如何修改会话.timeout
和会话.cookie\u expires
值,以便实现一个登录系统,让用户登录30天
我已经实现了标准的登录系统,所以在浏览器关闭之前一切都可以正常工作,但是如果用户选中“记住我”复选框,我想修改这些值
如果用户选中“记住我”复选框,我想到了两种变体:
- 将
session.cookie\u expires
和session.timeout
设置为30天,但我似乎无法在运行时修改这些值,因为我收到的cookie在浏览器会话结束时过期,忽略我的运行时修改
- 将
session.timeout
设置为30天,并覆盖名为bicker.session.id
的cookie,写入相同的会话id但到期日期不同。
但运行时问题来自第1点。仍然存在,而且我似乎无法访问我刚刚用烧杯创建的会话id,因此我不知道在cookie中存储什么
如何实现这一点?我提出的唯一解决方案是实现我自己的小后端,自己设置cookies,而不使用烧杯
为了子孙后代,代码如下:
方法:login\u bl
,upload\u view(db)
,已登录
,以及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
是的。我们做了同样的事情:这很简单。