如何使用flask在python中检索每个用户的会话存储中存储的相应数据集?

纳塔里希·J

这是将在以下代码块中使用的导入。

from flask import Flask, session

初始代码

# with required imports
# with previous code implemented (such as app=Flask(__name__))

@app.route('/')
def index():
    session['name'] = 'username'
    session['pwd'] = 'password'
    return {
        'username': session['name'],
        'password': session['pwd']
    }

上面代码在浏览器上的输出是

{
    "username": "username",
    "password": "password"
}

这意味着当前会话存储中有“name”属性和“pwd”属性。

但是据我了解,session存储的结构是这样的

{
    "Dx_h18Ux": {
                    "name": "username",
                    "pwd": "password"
                }
    "aqD81K_9": {
                    "name": "anothername",
                    "pwd": "anotherpwd"
                }
    ... more users to go
}

会话存储实际上包含多个相同结构的字典,但每个字典都存储在唯一的哈希键下。

所以,这是另一个代码块

# with required imports
# with previous code implemented

@app.route('/account')
def account():
    if session['name'] == 'username':
        return 'You do have access to this page'
    return 'You don't have access to this page'

使用此代码,仅当我之前访问过索引页面时,我才能访问帐户页面。

所以,我认为它有效,因为我刚刚创建了“name”和“pwd”属性,它们本地存储在此页面的某个地方(同时,它们可能也存储在会话存储中)。我可以session['name']在索引页之后访问,因为我可以从本地存储中获取数据。

现在,如果我已经app.config['PERMANENT_SESSION_LIFETIME]实现,我关闭选项卡并重新打开它,我不应该在本地存储中拥有任何东西,但会话仍然存在,因此数据仅存储在会话存储中。如果我是对的,如何使用给定的用户名从会话存储中获取用户的所有数据?

例如,我想取出这一块

"Dx_h18Ux": {
                "name": "username",
                "pwd": "password"
            }

或在代码版本中

@app.route('/get_session/<username>')
def get_session(username):
    ''' given a username as a locator, 
        fetch the whole dictionary that has a name attribute be username
    '''

    s = the chunk

    print(s['name'])
    # expected output: username

    print(s['pwd'])
    # expected output: password

如果我把事情搞砸了,我很抱歉。

杜贝

当您在 Flask 中使用默认会话时,所有数据都存储在用户机器上的 cookie 中。服务器根本没有保存它的副本。可以实现服务器端会话,但这不是 Flask 的开箱即用体验。

当用户访问您的网站时,如果他们有一个与您的网站相关联的 cookie——他们将随每个页面请求发送一份 cookie 的副本——该 cookie 使用您的 SECRET_KEY 进行加密签名,以便他们可以在他们的机器,他们不能在不使其失效的情况下更改任何内容,因此仅在他们提出请求时才提供。如果他们没有,他们将在第一个请求后创建一个。

本质上,您的服务器在用户访问之前以及在来自用户的请求周期期间都不持有任何卡片——服务器只能访问该单个用户的 cookie,因此扫描“会话存储库”以获取数据的想法并不真正存在。您能做的最好的事情是查看用户在请求期间移交的会话中的内容 ( print(session))。

我对会话的这个想法一开始感到困惑,我来自 PHP 背景,虽然我的记忆很模糊 - PHP 的会话默认为服务器端,客户端 cookie 只存储引用/ID。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在sqlalchemy范围内的会话中执行MySQL存储过程以返回单个数据集(用于flask Web应用程序)?

如何在会话中存储用户

在Flask会话中存储大数据或服务连接

如何在RDLC报表中检索一个存储过程返回多个表的数据集

如何在Flask的会话中存储WTForm表单?

如何在会话中存储检索到的对象并访问后记?

如何在Flask中存储用于会话的用户数据?

在Flask会话中存储oAuth状态令牌

在Flask会话中存储用户ID是否安全?

如何使用DirectLine通道在Azure表存储中存储和检索Bot数据?

如何使用Python从Firebase存储中检索图像?

Codeigniter-如何避免用户的多次登录将其会话存储在数据库中

使用Spotipy在Flask会话中存储Spotify令牌?

如何在Coldbox应用程序中使用Cbauth存储,检索和更新会话用户数据?

如何在数据库中存储和检索Django会话变量?

在存储库服务中检索用户http数据

如何在laravel 6中的每个用户登录时从本地存储中获取数据?

如何从uid存储的firebase中检索用户数据

Flask:何时使用会话与将用户数据存储在db中?

在asp.net核心的每个请求中,将用户数据存储在会话存储中还是从数据库中检索?

Rails:如何在会话中存储数据?

在会话数组中存储多个值并检索

如何在AngularJS中存储用户会话?

如何从Google数据存储中检索数据?

如何使用 Python/Flask 在 mysql 的行中存储列表?

如何从 Django 模型中获取特定用户的数据并将每个字段存储在单独的变量中

如何在会话中存储数据

如何在会话存储中存储变量

Javascript 存储在会话中,从 python/flask 中的会话中获取