Flask 分别为每个会话设置生存时间

Flask 分别为每个会话设置生存时间,flask,flask-kvsession,Flask,Flask Kvsession,KBsession根据永久会话生存期存储会话TTL有没有办法覆盖特定会话的TTL 编辑: 所以我有两个不同的API用于登录,我需要给其中一个的任何用户登录一个无限会话TTL,另一个将获得永久会话生存期值 注意:KBsession后端是redis,我认为最好的方法是创建特定的处理。这只是一个例子,但我希望你们能理解这个方法 from flask import Flask, session as flask_session, jsonify flask_app = Flask(__name__)

KBsession根据永久会话生存期存储会话TTL有没有办法覆盖特定会话的TTL

编辑: 所以我有两个不同的API用于登录,我需要给其中一个的任何用户登录一个无限会话TTL,另一个将获得永久会话生存期值
注意:KBsession后端是redis,我认为最好的方法是创建特定的处理。这只是一个例子,但我希望你们能理解这个方法

from flask import Flask, session as flask_session, jsonify

flask_app = Flask(__name__)
# just a few user types
UNIQUE_USER_TYPE = 'unique'
DEFAULT_USER_TYPE = 'default'

@flask_app.route('/login-default')
def login_default():
    flask_session['user_type'] = DEFAULT_USER_TYPE
    return 'login default done'

@flask_app.route('/login-unique')
def login_unique():
    flask_session['user_type'] = UNIQUE_USER_TYPE
    return 'login unique done'

@flask_app.route('/session-state')
def get_session_state():
    return jsonify(dict(flask_session))


class UserTypeSessionInterface(SecureCookieSessionInterface):

    def get_expiration_time(self, app, session):
        """
        I just override method. Just demonstration.
        It's called from save_session() and open_session()
        """
        if session.get('user_type') == UNIQUE_USER_TYPE:
            # set 1 hour for unique users
            delta = datetime.utcnow() + timedelta(hours=1)
        else:
            # set 3 hour for default users
            delta = datetime.utcnow() + timedelta(hours=3)
        # add datetime data into session
        session['lifetime'] = delta.strftime('%Y-%m-%dT%H:%M:%S')
        return delta
# use our custom session implementation
flask_app.session_interface = UserTypeSessionInterface()
现在运行服务器,打开新的私有窗口,
/login default
/session state

# default behaviour
{
  "lifetime": "2018-11-06T16:22:21", 
  "user_type": "default"
}
# unique behaviour
{
   "lifetime": "2018-11-06T14:25:17", 
   "user_type": "unique"
}
再打开一个私人窗口,
/login unique
/session state

# default behaviour
{
  "lifetime": "2018-11-06T16:22:21", 
  "user_type": "default"
}
# unique behaviour
{
   "lifetime": "2018-11-06T14:25:17", 
   "user_type": "unique"
}
所以,会话存储工具并不重要(redis、cassandra或其他)。您只需实现
打开会话()
保存会话()

您还可以使用自定义会话类(仅作为示例):


希望这能有所帮助。

您能解释一下细节吗?您想为特定用户或组更改永久会话生命周期吗?它实际上是针对特定用户的,因此我必须登录API。来自特定API的任何用户登录都应具有无限会话TTL,来自另一个API的任何用户都应具有定期会话。您是否使用不同的端点进行登录(针对特定用户类型)还是只有一个端点?不同的端点