Flask 中 URL 中没有 cookie 和 sid 的双向通信

Bidirectional Communication without cookies and sid in URL in flask

我正在尝试寻找一种方法来为服务器-客户端架构建立双向通信,而无需使用 cookie 且无需在 URL 中发送 sessionId。 Flask-SocketIO 例如不幸的是两者兼而有之。

也许有办法将 sessionID 作为 POST 发送?

任何帮助都会很棒。

您可以使用浏览器中的其他存储来存储session ID。例如,您可以使用 LocalStorage。 LocalStorage 的使用非常简单,下面的例子MDN 应该可以清楚地说明用法

localStorage = window.localStorage;
localStorage.setItem('myCat', 'Tom');
var cat = localStorage.getItem('myCat');
localStorage.removeItem('myCat');
// clear all items
localStorage.clear();

只要你使用JavaScript手动将session ID发送到flask服务器,其他一切都应该是正常的。

要在用户首次登录时将 session ID 发送到浏览器,您可以将其包含在响应 header 或网页的元标记中,让您的 JavaScript 检索并存储它。

要让 Flask-login 停止在 cookie 中发送 session ID 并改为在 meta 中发送它们,您必须编写自己的 session 接口。幸运的是,Flask's code 非常清晰,您可以参考它来创建自己的。只是固有 SessionInterface 并实现您的 save_sessionopen_session 方法。完成后,您可以使用 app.session_interface = YourSessionInterface() 将 Flask 的 session 引擎切换到您的引擎,然后初始化您的 LoginManager 和其他东西。希望这能给你一些思考。