问题标签 [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.

0 投票
2 回答
6620 浏览

node.js - 与 socket.io 一起使用时 express-session 未设置会话 cookie

我正在尝试使用 socket.io 实现身份验证和会话。

经过大量研究1,我设置了以下使用 express 和 express-session 的工具。

问题是,express 和 socket.io 连接似乎有不同的会话,因为id我得到的是不同的。

此外,我的应用程序的浏览器中没有设置 cookie(这可能是两个组件创建不同会话的原因?)

我正在使用 express 4.13.3express-session1.12.1和 socket.io 1.3.7

下面是我设置的服务器端代码:

以及用于测试目的的客户端代码:

以下是控制台中的输出:

在此处输入图像描述

这是浏览器中的资源部分:

在此处输入图像描述

我什至感到困惑的是,当登录控制台时该session对象没有任何属性,但打印出不同的值。也许这来自对象原型链或其他东西。idsession.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 实现会话的唯一方法。

0 投票
1 回答
8583 浏览

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 调用

发布http://localhost:4242/api/session

获取http://localhost:4242/api/users

基本上,第一个调用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 级别的一些不连贯或缺失的配置引起的,或者是由于pathSessions (Express.use(path, middleware)Cookie({path: '/'})) 的设置引起的。然而,尽管多次尝试使用不同的配置、设置和标题,我真的无法让它工作。

非常欢迎任何能够就这种行为以及我所缺少的东西给予我启发的人:)
谢谢!

PS:我向非 CoffeeScript 开发者道歉 ;)

0 投票
3 回答
7307 浏览

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 方法不起作用?

0 投票
0 回答
68 浏览

node.js - 在 express 中处理 http.request 中的会话变量

你好。当我在 UI 中打印 req.session.mySessValue 时,该值为空。我认为 req.session.mySessValue = dt.myValue; 的分配 (快速会话)不合适。谁能帮我解决这个问题。在此先感谢。我的快递代码是

0 投票
1 回答
2922 浏览

node.js - 快速会话不保存nodejs

这个简单的例子不起作用。在每个请求中都会再次创建会话,我不知道如何解决它。

我试图保存请求的计数,但每次我发出请求时都会创建会话。

0 投票
1 回答
3688 浏览

node.js - 如果会话 cookie 是安全的,则 CSURF 不起作用

当我将 cookie 设置为安全时,我很困惑,节点的 csrf 不起作用。

此设置使用 MongoDB 存储会话数据。阅读express-session文档,我遇到了这个......

请注意,secure: true 是推荐的选项。但是,它需要启用 https 的网站,即安全 cookie 需要 HTTPS。如果设置了安全,并且您通过 HTTP 访问您的站点,则不会设置 cookie。如果您的 node.js 位于代理后面并使用 secure: true,则需要在 express 中设置“信任代理”:

来源: npm express-session

我目前在本地运行该站点,所以它不是 HTTPS。我想知道secure:true与未通过 csrf 测试有何关系?

0 投票
1 回答
1336 浏览

node.js - express-session 没有保存用户的会话数据

express-session拒绝为我的用户保存会话数据。

正在保存会话 cookie,但数据没有持久化。

这是我的server.js

0 投票
0 回答
99 浏览

javascript - javascript深入理解cookies

在我的前端反应应用程序中,我试图检查是否存在会话 cookie,因为这将帮助我决定是显示登录页面(如果不存在会话 cookie 或无效),还是显示内容页面。

后端 express-session 中间件设置一个名为“connect.sid”的 cookie。当我使用 js-cookie 查询此 cookie 的存在时,它显示为undefined。但我知道这个 cookie 存在。我还从浏览器控制台以编程方式创建了另一个 cookie。虽然我能够成功查询我从浏览器控制台窗口以编程方式设置的 cookie,但我找不到第一个。

这是显示可用 cookie 的屏幕截图。 在此处输入图像描述

这是我从浏览器控制台对两个 cookie 的测试。 在此处输入图像描述

我无法弄清楚,为什么查询“connect.sid”失败。有人可以帮我吗,我在哪里出错了......

0 投票
3 回答
261 浏览

session - express-session 没有存储会话

在这里,我使用 express-session 来存储用户会话,但发现 req.session.user 始终未定义。

搞笑的是,我用chrome插件postman访问的时候,没有问题。

那么如何解决呢?

0 投票
2 回答
629 浏览

node.js - Req.session undefined with express 4 and Redis store, express-session

似乎无法弄清楚如何使用 redis 存储与 Express 4 进行会话,一些示例代码如下所示:

如您所见,上面的 req.session 似乎总是未定义,并且显然无法在其中存储任何变量...