如何为 Flask 应用程序用户分配 Redis 键名?
How to assign Redis key names to Flask app users?
我有一个 Flask 应用程序,它在本地主机上的 Redis 中存储用户会话。
用户会话由 Flask-Session 模块管理:
import flask
import redis
import flask_session
app = flask.Flask(__name__)
app.secret_key = b'Test123'
app.config['SESSION_TYPE'] = 'redis'
app.config['SESSION_KEY_PREFIX'] = 'flask_session_'
app.config['SESSION_PERMANENT'] = False
app.config['SESSION_USE_SIGNER'] = True
app.config['SESSION_REDIS'] = redis.from_url('redis://localhost:6379', password='Test123')
server_session = flask_session.Session(app)
我想知道哪个 Redis 会话密钥 name 属于哪个用户或设备。
例如,我想将客户端的 IP 地址添加到 Redis 键名中。
可能吗?
当我尝试获取客户端的 IP 地址并将其设置为这样的键前缀时:
ip = flask.request.environ.get('REMOTE_ADDR')
app.config['SESSION_KEY_PREFIX'] = 'flask_session_' + ip
我在 Apache 中收到此消息 error.log:
RuntimeError: Working outside of request context.
[Fri Feb 11 22:19:14.371919 2022] [wsgi:error] [pid 264638:tid 264787] [remote 1.2.3.4:35695] This typically means that you attempted to use functionality that needed
[Fri Feb 11 22:19:14.371930 2022] [wsgi:error] [pid 264638:tid 264787] [remote 1.2.3.4:35695] an active HTTP request. Consult the documentation on testing for
[Fri Feb 11 22:19:14.371941 2022] [wsgi:error] [pid 264638:tid 264787] [remote 1.2.3.4:35695] information about how to avoid this problem.
我想通了。
显然你不能在请求之前 运行 flask.request.environ.get('REMOTE_ADDR')
,即使 @app.before_request
.
因此,为了识别会话(Redis 密钥名称)并将它们分配给应用程序用户(所以我知道哪个 session/key 属于哪个用户)我的应用程序现在将 Flask-Session SID 连同登录的用户名一起写入 Apache error.log:
app.logger.warning('User ' + login + ' logged in. Flask-Session SID: ' + str(flask.session.sid) + '. Flask-Login session ID: ' + str(flask.session['_id']) + '.')
Flask-Session SID 为 Redis 键名。
另一种方法是在请求后(用户登录后)将用户名或 IP 地址存储在 flask.session 中,SCAN
-ning Redis KEYS
用于值(用户名或 IP 地址)和 RENAME
-按模式输入键。
我有一个 Flask 应用程序,它在本地主机上的 Redis 中存储用户会话。
用户会话由 Flask-Session 模块管理:
import flask
import redis
import flask_session
app = flask.Flask(__name__)
app.secret_key = b'Test123'
app.config['SESSION_TYPE'] = 'redis'
app.config['SESSION_KEY_PREFIX'] = 'flask_session_'
app.config['SESSION_PERMANENT'] = False
app.config['SESSION_USE_SIGNER'] = True
app.config['SESSION_REDIS'] = redis.from_url('redis://localhost:6379', password='Test123')
server_session = flask_session.Session(app)
我想知道哪个 Redis 会话密钥 name 属于哪个用户或设备。
例如,我想将客户端的 IP 地址添加到 Redis 键名中。
可能吗?
当我尝试获取客户端的 IP 地址并将其设置为这样的键前缀时:
ip = flask.request.environ.get('REMOTE_ADDR')
app.config['SESSION_KEY_PREFIX'] = 'flask_session_' + ip
我在 Apache 中收到此消息 error.log:
RuntimeError: Working outside of request context.
[Fri Feb 11 22:19:14.371919 2022] [wsgi:error] [pid 264638:tid 264787] [remote 1.2.3.4:35695] This typically means that you attempted to use functionality that needed
[Fri Feb 11 22:19:14.371930 2022] [wsgi:error] [pid 264638:tid 264787] [remote 1.2.3.4:35695] an active HTTP request. Consult the documentation on testing for
[Fri Feb 11 22:19:14.371941 2022] [wsgi:error] [pid 264638:tid 264787] [remote 1.2.3.4:35695] information about how to avoid this problem.
我想通了。
显然你不能在请求之前 运行 flask.request.environ.get('REMOTE_ADDR')
,即使 @app.before_request
.
因此,为了识别会话(Redis 密钥名称)并将它们分配给应用程序用户(所以我知道哪个 session/key 属于哪个用户)我的应用程序现在将 Flask-Session SID 连同登录的用户名一起写入 Apache error.log:
app.logger.warning('User ' + login + ' logged in. Flask-Session SID: ' + str(flask.session.sid) + '. Flask-Login session ID: ' + str(flask.session['_id']) + '.')
Flask-Session SID 为 Redis 键名。
另一种方法是在请求后(用户登录后)将用户名或 IP 地址存储在 flask.session 中,SCAN
-ning Redis KEYS
用于值(用户名或 IP 地址)和 RENAME
-按模式输入键。