问题标签 [flask-session]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1259 浏览

python - 如何解码/读取 Flask 文件系统会话文件?

我有一个使用Flask-Session的 Python3 Flask 应用程序(它添加了服务器端会话支持)并配置为使用该filesystem类型。

这种类型底层使用 Werkzeug 类werkzeug.contrib.cache.FileSystemCacheWerkzeug 缓存文档)。

如果打开,原始缓存文件如下所示:

可以在上面看到存储在会话中的项目: -current_section应该是整数,例如0 -SECTIONS_VISITED应该是整数数组,例如[0,1,2] -SURVEY_CONTENT格式应该是具有如下结构的对象

您可以在上面的摘录中看到,例如文本This section determines if you fit into the target group是一个标签的值。后面的东西questions是可以在每个questions对象中找到的键,例如,q_text以及它们的值,例如,Have you worked on a product in this field before?是 的值q_text

我需要从存储的缓存文件中检索数据,这样我就可以在没有所有额外字符的情况下读取它们,例如å.

我尝试像这样使用 Werkzeug,其中项目9c3c48a94198f61aa02a744b16666317是我要读取的缓存文件的名称。但是,在缓存目录中找不到它。

有哪些方法可以读取缓存文件?

我在 Flask-Session 中打开了一个GitHub 问题,但多年来并没有真正得到积极维护。

对于上下文,我有一个实例,我的 Web 应用程序写入数据库暂时无法正常工作 - 但我需要的数据也保存在会话中。所以现在检索该数据的唯一方法是从这些文件中获取它。

编辑:

感谢蒂姆的回答,我使用以下方法解决了它:

我需要加载文件中的所有腌制对象,因此我将 Tim 的解决方案与此处用于加载多个对象的解决方案相结合:https ://stackoverflow.com/a/49261333/11805662

没有这个,我只是看到了第一个腌制品。

另外,如果有人遇到同样的问题,我需要使用与我的 Flask 应用程序相同的 python 版本(相关帖子)。如果我没有,那么我会收到以下错误:

0 投票
0 回答
575 浏览

python - 会话不会在烧瓶会话中持续存在

我有一个 reactJS Web 应用程序作为我的前端,我正在请求在我的 Flask 服务器中路由“/addData”并设置一个名为“FileName”的状态变量。

然后在这一行之后立即将会话变量打印为:

它打印了分配的正确名称。

然后我在烧瓶服务器中调用了另一个路由“/visualize”。当我尝试使用以下方法访问此路由内的会话变量时:

它打印“未设置”。

注意:我使用的是 Flask-session(服务器端会话)

下面显示的是我的init .py 文件

下面显示的是我的 2 条路线:

我在 StackOverflow 中尝试了很多东西,但没有任何效果。我究竟做错了什么?

0 投票
1 回答
962 浏览

python - 从 Flask 中的 @app.route 更新全局字典/列表

我正在尝试找到一种方法来从烧瓶应用程序的函数中更新字典(全局)。我想在这样的字典中存储有关创建帐户的用户的信息。

但我似乎无法从函数内更新字典或列表。我已经尝试了两种 更新方法user['key']={'key1':'value1', 'key2':'value2'}user.update({'key': {'key1':'value1', 'key2':'value2'} 但它不起作用。

这是这部分的完整代码。

我已经通过在纯 python 中尝试这个问题找到了问题,在没有先运行该函数的情况下,我也无法更新 dict。但是,我如何在烧瓶中运行每个单独的函数(例如,index() 或 signin()),因为我认为这是问题所在?我认为这应该由 app.run() 处理,但它不起作用。

我每次都收到“KeyError”,因为字典中没有插入任何内容,因此没有任何内容可供选择或访问。

我试图避免使用数据库,我真的很想弄清楚这一点,我不知道我做错了什么。该代码在烧瓶应用程序之外运行得非常好,这就是它令人沮丧的原因。

0 投票
1 回答
2554 浏览

reactjs - Flask 会话无法在反应前端应用程序上创建 cookie(使用 set-cookie 响应标头)

问题

我正在尝试使用服务器端会话(保存在 PSQL db 上),但它们不会在请求之间持续存在。

描述

我在本地运行我的应用程序,分为两部分。

  1. 在MY_IP:2501上运行的后端
  2. 在MY_IP:3000上运行的前端

现在根据我的理解,Flask 将会话保存在 PSQL 的“会话”表中(因为我们正在存储服务器端会话),并且该特定行的 ID 以响应标头的形式发送到客户端,即“Set-曲奇饼”。

上面描述的每件事都在工作,但是当 React 前端(或浏览器)收到这个头时,它不会从中创建一个 cookie,因为会话 id 没有存储在前端,然后前端无法发送与后端相同,因为它无法获取关联的会话数据,导致每次都为空会话。

:(

到目前为止我尝试过的东西..

  1. 在返回响应时允许所有类型的标头完成。

  2. 完成允许来自前端和后端的 withCredentials 标头属性。

  3. 使用“SESSION_COOKIE_HTTPONLY”配置属性从会话中删除了 HttpOnly 参数

  4. 完成与前端相同的“SESSION_COOKIE_DOMAIN”设置

笔记

  1. 如果我通过 POSTMAN 调用我的 API,则会话将持续存在,因为 cookie 保存在 POSTMAN 中。

  2. 如果我在 chrome --disable-web-security 上运行应用程序,那么它也可以工作。

0 投票
1 回答
144 浏览

flask - Flask 会话 - cookie 被覆盖/提供给错误的用户

注销时使用session.clear()不会清除 cookie。缓存已关闭。没有 GLOBALS 在任何地方使用。

它发生的时候是完全随机的。只需正常单击站点(始终获取请求),用户就会以某种方式最终成为其他用户。

Cloudflare 已开启,但他们甚至缓存 cookie 吗?

我们也在使用蓝图。

任何想法在哪里看?

0 投票
2 回答
1892 浏览

python-3.x - 烧瓶会话:PERMANENT_SESSION_LIFETIME 未正确设置

所以我正在使用烧瓶会话。我正在使用文件系统类型,以便可以存储比其他方式更多的会话数据。我的用户希望长时间保持会话超时,并且该站点使用最少的服务器存储,所以这很好。但是,当我尝试将超时会话设置为 24 小时以下时,它仍然会在 30 分钟后超时。

我在这里做错了什么?

0 投票
1 回答
885 浏览

python - 是否可以将 Flask 会话传递给不在路由中的另一个 .py 文件?

我有一个 auth.py 文件,我在其中存储

如果用户登录,我可以在控制台中看到会话数据。如何将此会话数据传递给另一个文件test.py

test.py某些处理中发生并且没有路由,因为用户不需要对此进行访问。

0 投票
1 回答
136 浏览

google-chrome - Chrome 会话 cookie 对于数据库列来说太长了

我正在使用Flask-Session实现服务器端会话 cookie 。

该实现在很大程度上运行良好,但在使用 Chrome 访问我的 API 时遇到以下错误:

sqlalchemy.exc.DataError: (pymysql.err.DataError) (1406, "Data too long for column 'session_id' at row 1")

这是我的会话表 (flask_sessions_table) 的架构(由烧瓶扩展生成):

我在任何其他主要浏览器(Firefox、Chromium、Safari、Postman 等)上都没有遇到此错误。看来从 Chrome 发送到我的基于 Flask 的应用程序的会话 cookie 太长(约 300 个字符,有时甚至约 1200 个字符),而从其他浏览器来看,它们最多约 50 个字符。请参阅此附加图像:

chrome 上的会话 cookie - 太大了!

此错误导致我的应用程序(API 服务器)崩溃,因为flask-session 无法在每个请求进入时保存会话 cookie。我想到了以下解决方法,但它们无法工作:

  1. 将 flask_sessions_table.session_id 从 varchar(255) 转换为 LONGTEXT。SQLAlchemy (ORM) 似乎不支持文本类型?
  2. 截断并保存 chrome cookie 中的前 255 个字符。在保存会话 cookie 之前似乎没有办法“拦截”请求:扩展程序会在我的请求路由上的语句执行之前立即保存 cookie

关于如何为 Chrome 解决此问题的任何其他想法?

更新:我观察到当域是“localhost”时,cookie 的长度超过 255 个字符,而当从ngrok访问相同的确切实例时,它们是正常的(~43 个字符)。本地主机上的 Chrome 可能导致长会话 cookie 的原因是什么?

0 投票
1 回答
163 浏览

flask - 如果浏览器关闭(会话),我如何使用flask socketio保存和显示现有进度状态

要求 :-

用烧瓶做一个项目。

flask socketIo ...我几乎完成了这个项目。现在我想实现一些在 Web 开发中很常见的东西。

现在我可以在 UI 中显示后台任务的状态,并且事件正在发送到特定的(request.sid)。现在,如果用户不小心关闭了他的浏览器并返回到同一页面,出于显而易见的原因,他将看不到任何东西(这是在现有会话中发生的),但如果用户再次来到初始页面,我想要一种方式页面,它应该被重定向到当前状态页面。

我正在尝试实现与任何基于云的解决方案完全相同的东西,例如,如果我从控制台创建一个 Ec2 实例并关闭它。重新打开后,它仍会显示具有当前状态(正在运行、待处理)等的现有操作。如何实现呢?

0 投票
1 回答
352 浏览

python - Flask - 在路由之间传递选定字段以生成查询并显示结果

我正在构建一个应用程序,它将在我的主页/索引页面上显示 year_from 和 year_to 下拉列表,并将在另一个页面上返回匹配结果。

所需流量: 向用户显示 2 个带有预填充数据的下拉菜单。用户在索引路径上选择年份范围。然后,该年份范围将查询数据库并返回列表路线上年份范围之间的所有结果。

我能够达到可以逐年查询我的数据库的地步,并将它们呈现在 flask-wtf 查询选择字段中。

问题: 我无法从索引页面中获取用户选择的字段并使用它们生成查询并在我的列表页面中返回结果。未传递用户选择的字段。

我错过了什么?

路线

形式

指数