我正在使用瓶子和烧杯通过python进行会话管理。我已经构建了WSGI Web服务,并按如下方式配置了烧杯会话:
session_opts = {
'session.type': 'memory',
# 'session.cookie_expires': 43200,
'session.auto': True,
'session.secure': True,
'session.timeout': 1800,
'session.httponly': True,
'session.validate_key': 'test',
'session.cookie_expires' : True
}
app = beaker.middleware.SessionMiddleware(bottle.app(), session_opts)
bottle.run(app=app)
我需要会话在浏览器关闭以及cookie的总寿命到期时结束。但是,它们都由session.cookie_expires控制。将其设置为True会在浏览器关闭时结束会话,将其设置为43200可延长其12小时的使用寿命。取消注释'session.cookie_expires':43200,将导致'session.cookie_expires':true被忽略。
我不确定如何使两者都起作用。这是此配置选项的文档栏:
cookie_expires(可选,布尔,日期时间,timedelta,int) 确定用于跟踪会话客户端的cookie何时到期。设置为布尔值时, 在浏览器会话结束时过期,或者永不过期。 将日期时间设置为强制会话的硬结束时间(通常用于将会话设置为较远的日期)。 设置为整数将导致cookie被设置为在这么多秒后过期。即值300将导致 Cookie被设置为在300秒后过期。 默认为永不过期。
我的决议: 我保留了'session.cookie_expires':True,并添加了以下代码来处理总寿命:
now = datetime.datetime.now().strftime('%s')
delta = int(now) - int(request.session['_creation_time'])
if(delta > 43200):
request.session.delete()
return redirect('/login')