gpt4 book ai didi

python - Beaker 作为 session 中间件

转载 作者:太空狗 更新时间:2023-10-30 01:35:04 24 4
gpt4 key购买 nike

我正在使用 bottle.py 和 beaker.middleware.SessionMiddleware 编写应用:

如何修改 session.timeoutsession.cookie_expires 值,以便我可以实现一个让用户登录 30 天的登录系统?

我已经实现了标准登录系统,所以在浏览器关闭之前一切正常,但我想在用户选中记住我复选框时修改这些值。

如果用户选中记住我复选框,我想到了两种变体:

  • session.cookie_expiressession.timeout 设置为 30 天,但我似乎无法在运行时修改这些值,因为 cookie我在浏览器 session 结束时收到过期消息,忽略了我的运行时修改。

  • session.timeout 设置为 30 天并覆盖名为 beaker.session.id 的 cookie,写入相同的 session ID 但不同的到期日期。但是第 1 点的运行时问题仍然存在,我似乎无法访问我刚刚用烧杯创建的 session ID,所以我不知道要在 cookie 中存储什么。

我该如何实现?

最佳答案

我想出的唯一解决方案是实现我自己的小后端并自己设置 cookie,没有烧杯。

为了后代,代码在这里: https://github.com/paulbarbu/bottle-upload/blob/master/index.py方法:login_blupload_view(db)is_logged_inlogout()。请注意,这是一些非常旧的代码,尚未准备好生产,使用风险自负,上面链接中的一些代码片段如下:

登录:

@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

关于python - Beaker 作为 session 中间件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9965195/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com