gpt4 book ai didi

python - 重新生成所有 flask session 而不注销用户

转载 作者:行者123 更新时间:2023-12-02 04:30:19 24 4
gpt4 key购买 nike

基本上我想要做的是使用一些新的 key 集重新生成每个 session ,而无需用户再次登录。我怎样才能做到这一点?

为了清晰起见进行了编辑

因此,假设我们使用 Redis 作为 session 后端,并将其 cookie 保存在客户端。 Cookie 仅包含 session ID。该 session id对应于Redis上的 session 。在我们通过在应用程序中编写 Session(APP) 来初始化 Session 后,对于每个请求上下文,我们可以通过

获取当前用户的 session
from flask import session 

管理员更改应用程序上的一些常规设置后,我愿意重新生成每个当前用户的 session ,该 session 可以再次为当前用户看到

from flask import session

据我所知,这是。

例如,假设用户 session 中有一个值确定为

session['arbitrary_key'] = not_important_database_function()

管理员在应用程序中更改一些内容后,我需要通过

在当前用户 session 上重新加载 key
session['arbitrary_key'] = not_important_database_function()

因为管理员进行更改后,它将产生不同的值。之后,我将 session.modified 更改为 true。我想了解的是如何更改每个用户 session 上的任意_key。因为我缺乏有关如何获取每个 session 并从 Flask 更改它们的信息。

如果我从 Redis 中删除 session ,用户需要重新进行身份验证。我不希望他们重新进行身份验证。我只想更改后端 session ,因为我使用用户 session 内部的一些信息,这些信息需要从 Redis 获取,因此我不必为每个请求调用 not_important_database_function

我希望这是足够的信息,让您至少不回答,也不投反对票,这样我就可以继续寻找问题的解决方案。

我不会共享代码片段,因为在我看来,没有代码片段对这种情况有帮助。

最佳答案

这个问题相当老了,但看起来很多开发者都对答案感兴趣。我想到了几种方法:

1。惰性计算

您需要一种方法来区分新旧 session 值。例如,在 session 中存储版本号。然后,您可以强制客户端在使用您的资源时更新其 session :

CURRENT_VERSION = '1.2.3'

@app.route('/some_route')
def some_handler():
if session.get('version', '0.0.0') < CURRENT_VERSION:
session['arbitrary_key'] = not_important_database_function()
session['version'] = CURRENT_VERSION

优点:该方法易于实现,并且与存储 session 数据的方式(数据库、用户代理等)无关

缺点:部署后 session 数据不会立即更新。您必须放弃某些用户的 session 数据可能根本无法更新的情况。

2。 session 存储更新

您需要为 session 存储进行某种数据库迁移。它依赖于后端,并且对于不同的存储看起来会有所不同。对于 Redis,它可能看起来像这样:

import json
import redis

r = redis.Redis() # Your connection settings here
for key in r.scan_iter():
raw_value = r.get(key)
session = json.loads(raw_value)
session['arbitrary_key'] = not_important_database_function()
r.set(key, json.dumps(session))

优点:所有用户的 session 数据将在服务部署后立即更新。

缺点:不同存储的方法实现有所不同。如果所有 session 数据都存储在用户代理中,则不适用。

3。删除 session 数据

尽管问题中明确指出您需要保持用户登录,但这仍然是一个选项。它可能是部署新应用程序版本的策略的一部分: session key 在应用程序部署和所有用户时重新生成 session 无效。

优点:您不需要实现任何逻辑来设置新的用户 session 值。

缺点:没有新的用户 session 值,数据刚刚被清除。

关于python - 重新生成所有 flask session 而不注销用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42763834/

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