问题标签 [express-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.
node.js - 与 socket.io 一起使用时 express-session 未设置会话 cookie
我正在尝试使用 socket.io 实现身份验证和会话。
经过大量研究1,我设置了以下使用 express 和 express-session 的工具。
问题是,express 和 socket.io 连接似乎有不同的会话,因为id
我得到的是不同的。
此外,我的应用程序的浏览器中没有设置 cookie(这可能是两个组件创建不同会话的原因?)
我正在使用 express 4.13.3
express-session1.12.1
和 socket.io 1.3.7
。
下面是我设置的服务器端代码:
以及用于测试目的的客户端代码:
以下是控制台中的输出:
这是浏览器中的资源部分:
我什至感到困惑的是,当登录控制台时该session
对象没有任何属性,但打印出不同的值。也许这来自对象原型链或其他东西。id
session.id
我能想到的与我的代码和教程的唯一区别是,它们都index.html
从同一个快速服务器提供页面。就我而言,我在本地有文件。
我在某处读到,在这种情况下,我必须http
在建立 socket.io 连接之前发送一个表达请求。
socket.io.js
客户端库由 express 和 socket.io ( ) 共享的同一服务器提供服务,<script src="http://127.0.0.1/socket.io/socket.io.js"></script>
除此之外,我还在/login
建立套接字连接之前访问 express 路由以进行测试。
所以我想知道为什么客户端没有设置 cookie,为什么 express 和 socket 请求创建了不同的会话..?我在这里想念什么..?
1代码主要基于:
PS:我想做的是,当套接字客户端重新连接时,我需要将他放回他所在的位置,并提供会话详细信息。我真的不想与 express 共享会话,但 express 中间件是我遇到的使用 socket.io 实现会话的唯一方法。
node.js - 在 CORS 调用后,Express Session 不会持续存在
TL;博士:
无法通过 Express、Express-Session 和 Express-Cors 在 Backbone 应用程序和 Node.js 服务器之间执行的多个 API 调用中成功保持会话。每次通话后似乎会话都会重新初始化/丢失。
长版:
我正在运行一个客户端 Backbone/React/Flux 应用程序,在运行localhost:3000
的 Node.js 服务器上执行以下调用localhost:4242
:
Http 调用
基本上,第一个调用POST /api/session
是登录用户并尝试在会话中存储 API 令牌。第二次调用GET /api/users
在第一次调用成功后立即触发,并检索用户信息。
骨干法
这是我在 Session 模型上用于登录的 Backbone 方法:
以及在我的 UserStore 中对 /api/users 的调用
使用这些不同的选项(我在 Backbone.Collection/Backbone.Model 中覆盖了 Backbone.sync):
(简化版:模型和集合都是一样的,使用 BaseCollection 和 BaseModel,我在其中覆盖了 sync() 方法)。
所以Console.log(options)
inBackbone.sync(method, model, options)
正在返回:
Node.js 设置和方法
这是我的 Node.js 路由器设置 Express :
这是我的 Node.js 方法处理POST /api/session
和一个处理GET /api/users
Node.js 日志
这是日志:
如您所见,CORS 请求正常执行,我正确获取了我的令牌,然后尝试将其存储在会话中。
但是,在第二次调用中,会话没有持久化,我无法访问我在第一次调用中实际设置的变量 (accessToken)。
查看日志和两个调用的 HTTP 标头,看起来会话每次都重新初始化,因为会话 ID 正在更改并且每个请求 - 并且每次都发送一个 Set-Request 标头(不应该据我所知,情况就是这样)。
我怀疑这种行为是由 CORS 级别的一些不连贯或缺失的配置引起的,或者是由于path
Sessions (Express.use(path, middleware)
和Cookie({path: '/'})
) 的设置引起的。然而,尽管多次尝试使用不同的配置、设置和标题,我真的无法让它工作。
非常欢迎任何能够就这种行为以及我所缺少的东西给予我启发的人:)
谢谢!
PS:我向非 CoffeeScript 开发者道歉 ;)
node.js - Node Express 无法使用 post 请求设置会话
我使用 node express 4.0 来实现消息代码验证功能。我使用 session 来存储我发送的 msg 代码。我按照dos说的设置了session中间件:</p>
但是当我使用 post 方法获取 msg 代码时,我发现 session 没有设置成功。
像下面的这段代码:
当我重新发布此路由器时,我发现req.session.test
未定义。
然后我在另一个路由器上试试这个:
每次我请求sendMsgTest
,我都能得到req.session.test
。当我请求另一种get
方法时,我可以req.session.test
成功获得价值。
那么为什么我的 post 方法不起作用?
node.js - 在 express 中处理 http.request 中的会话变量
你好。当我在 UI 中打印 req.session.mySessValue 时,该值为空。我认为 req.session.mySessValue = dt.myValue; 的分配 (快速会话)不合适。谁能帮我解决这个问题。在此先感谢。我的快递代码是
node.js - 快速会话不保存nodejs
这个简单的例子不起作用。在每个请求中都会再次创建会话,我不知道如何解决它。
我试图保存请求的计数,但每次我发出请求时都会创建会话。
node.js - 如果会话 cookie 是安全的,则 CSURF 不起作用
当我将 cookie 设置为安全时,我很困惑,节点的 csrf 不起作用。
此设置使用 MongoDB 存储会话数据。阅读express-session
文档,我遇到了这个......
请注意,secure: true 是推荐的选项。但是,它需要启用 https 的网站,即安全 cookie 需要 HTTPS。如果设置了安全,并且您通过 HTTP 访问您的站点,则不会设置 cookie。如果您的 node.js 位于代理后面并使用 secure: true,则需要在 express 中设置“信任代理”:
我目前在本地运行该站点,所以它不是 HTTPS。我想知道secure:true
与未通过 csrf 测试有何关系?
javascript - javascript深入理解cookies
在我的前端反应应用程序中,我试图检查是否存在会话 cookie,因为这将帮助我决定是显示登录页面(如果不存在会话 cookie 或无效),还是显示内容页面。
后端 express-session 中间件设置一个名为“connect.sid”的 cookie。当我使用 js-cookie 查询此 cookie 的存在时,它显示为undefined。但我知道这个 cookie 存在。我还从浏览器控制台以编程方式创建了另一个 cookie。虽然我能够成功查询我从浏览器控制台窗口以编程方式设置的 cookie,但我找不到第一个。
我无法弄清楚,为什么查询“connect.sid”失败。有人可以帮我吗,我在哪里出错了......
session - express-session 没有存储会话
在这里,我使用 express-session 来存储用户会话,但发现 req.session.user 始终未定义。
搞笑的是,我用chrome插件postman访问的时候,没有问题。
那么如何解决呢?
node.js - Req.session undefined with express 4 and Redis store, express-session
似乎无法弄清楚如何使用 redis 存储与 Express 4 进行会话,一些示例代码如下所示:
如您所见,上面的 req.session 似乎总是未定义,并且显然无法在其中存储任何变量...