可以在 Python Flask 中为不同的用户创建不同的会话超时长度吗?

Posted

技术标签:

【中文标题】可以在 Python Flask 中为不同的用户创建不同的会话超时长度吗?【英文标题】:Possible to create different session timeout lengths for different users in Python Flask? 【发布时间】:2017-08-31 15:39:47 【问题描述】:

我有一个 Angular/Flask Web 应用程序,我正在尝试创建一个管理页面,该页面将由某个 URL 访问,例如“/admin_page”。该页面将需要额外的身份验证,并且需要发出比所有其他用户的超时时间短的会话超时时间

但是,我的印象是所有会话都是从我的烧瓶应用程序中的同一个变量生成的,我将其配置为:

app.permanent_session_lifetime = timedelta(seconds=int)

所以,我的问题是:有没有办法在不影响其他用户会话超时时长的情况下更改某些用户的会话超时时长?

即 如果在/admin_page 的路由处理程序中我临时更改app.permanent_session_lifetime 的值,创建用户会话,然后将变量恢复为其原始值,那么之前创建的会话的超时值是否会改变?

【问题讨论】:

非常好的问题。您不希望根据用户角色发出此会话生命周期,只是 url 端点,对吗? 谢谢。是的,这是正确的 您也可以在这些答案***.com/questions/14367991/… 中进行此类检查并在预请求处理中使会话无效 【参考方案1】:

当然可以!

1) 如果您想要的是基于 url 的生命周期会话:

为每个视图附加您的配置行:

app.permanent_session_lifetime = timedelta(seconds=int)

app.config['PERMANENT_SESSION_LIFETIME'] = <intended_value_in_seconds>

2) 如果是基于每个用户:

我建议创建组并为每个组分配一个特定的配置,这样您就可以在需要时调用配置。

def group_session(self, group):
    if group_session == 'visitors':
       return app.config['PERMANENT_SESSION_LIFETIME'] == <intended_value_in_seconds>
    if group_session == 'admin':
        return app.config['PERMANENT_SESSION_LIFETIME'] == <intended_value_in_seconds>
    return app.config['PERMANENT_SESSION_LIFETIME']

3) 如果您希望拥有按用户会话的生命周期,那么:

if user == <chosen_name>:
    app.config['PERMANENT_SESSION_LIFETIME'] == <intended_value_in_seconds>

我希望这会有所帮助!

【讨论】:

问题不在于我不知道如何更改会话生存期变量(请参阅我的问题的中间部分)。问题在于,在烧瓶中,“permanent_session_lifetime”变量是一个单例,它会追溯覆盖先前创建的会话的超时长度。因此,如果管理员在有用户登录的情况下登录(带有较短的会话),则用户的会话将被管理员会话长度覆盖并提前注销。因此,我要问的是我是否可以在没有这种不需要的行为的情况下保持会话长度的不同值【参考方案2】:

子类 SecureCookieSessionInterface 一个覆盖 get_expiration_time() 方法,您可以在其中设置单个会话的会话过期时间。

【讨论】:

以上是关于可以在 Python Flask 中为不同的用户创建不同的会话超时长度吗?的主要内容,如果未能解决你的问题,请参考以下文章

flask后台用户权限管理

如何在 Microsoft Teams 中为 @提及创建子组

有人可以帮我在pygame中为扑克游戏创建一副纸牌吗

在Flask中创建调查

雷林鹏分享:Flask开发环境安装配置

11.4 Flask session,闪现