Python 烧杯作为会话中间件

Python 烧杯作为会话中间件,python,bottle,beaker,Python,Bottle,Beaker,我正在使用瓶子.py和烧杯.middleware.SessionMiddleware编写一个应用程序: 如何修改会话.timeout和会话.cookie\u expires值,以便实现一个登录系统,让用户登录30天 我已经实现了标准的登录系统,所以在浏览器关闭之前一切都可以正常工作,但是如果用户选中“记住我”复选框,我想修改这些值 如果用户选中“记住我”复选框,我想到了两种变体: 将session.cookie\u expires和session.timeout设置为30天,但我似乎无法在运行

我正在使用瓶子.py和烧杯.middleware.SessionMiddleware
编写一个应用程序:

如何修改
会话.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
是的。我们做了同样的事情:这很简单。