问题标签 [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 回答
9467 浏览

javascript - express-session 不能与 express 4.13 一起使用吗?

因此,据我所知,我已经根据快速会话的文档设置了会话。但是我的cookie没有被创建!根据文档,您所要做的就是设置 request.session 值,并且应该自动设置 cookie。我不确定是什么伏都教能做到这一点,但魔法似乎被打破了。只是为了确保我根据此处给出的示例进行了验证。我错了吗?这些是否缺少一些关键信息?

所以我想知道我做错了什么,还是最新的错误?我可以检查我的数据库,并且确实在会话表中的行上看到了正确的会话变量!

为什么我的客户端 cookie 没有设置?它不会显示在资源调试面板中。所以我想知道最新的 4.13.3 版本与 express-session 1.11.3 协同工作是否存在错误。这是截至 8 月 27 日的最新数据。

0 投票
1 回答
3191 浏览

node.js - Node js为每个请求创建不同的会话ID

使用 express-session 并将会话存储在文件中。但是,它正在创建新会话 ID 的每个请求,并且正在创建新文件。

这是我用来创建会话的代码。

但是我希望它应该为每个用户创建一个会话 ID,或者直到会话过期。

0 投票
2 回答
1546 浏览

javascript - socket.io 身份验证与共享会话数据,io.use() 如何工作

灵感来自如何与 Socket.IO 1.x 和 Express 4.x 共享会话?我以某种“干净”的方式实现了套接字身份验证,不需要使用 cookie 解析器并从标头中读取 cookie,但我仍然不清楚。示例使用最后一个稳定的 socket.io 版本 1.3.6。

index.html

因此io('http://localhost:8080/abc');,客户端将向服务器发送初始 HTTP 握手请求,服务器可以从中收集 cookie 和许多其他请求信息。因此服务器可以通过socket.request访问该初始请求。

我的第一个问题是为什么握手请求不在快速会话中间件的范围内?(更一般地在app.use中间件的范围内?)在某种程度上我期望这个app.use(sessionMiddleware); 在初始请求之前触发,然后轻松访问socket.request.session

其次,用 定义的中间件io.use()会触发的场景是什么?仅适用于初始 HTTP 握手请求?似乎io.use()用于与套接字相关的东西(问题是:什么东西),而app.use用于标准请求。

我不太清楚为什么在上面的例子io.use()中被解雇之前io.of('/abc').use()。我故意写了这个命令,io.of('/abc').use()首先看看它是否有效并且有效。应该写反了。

最后,socket.request.res也像链接问题中的一些人指出的那样,有时undefined导致应用程序崩溃,可以通过提供空对象而不是socket.request.res来解决问题,例如:sessionMiddleware(socket.request, {}, next);在我看来这像是一个肮脏的黑客. socket.request.res 屈服于什么原因undefined

0 投票
1 回答
1687 浏览

node.js - 不活动时间后自动删除 mongodb 文档

我需要在指定时间段不被访问后删除 mongodb 文档。

我有一个访问令牌,用于从外部源检索数据并将其保存在我的数据库中。

在我的会话中,我存储了一个用户 ID,当用户发出请求时,我可以使用检索访问令牌。

如果我的会话过期,我的数据库中保存的访问令牌将永远不会再次使用。

系统将提示用户重新进行身份验证,并且新的访问令牌将保存在数据库中。

如果用户明确注销,我可以轻松地从数据库中删除现在无效的访问令牌。但是如果他们从不注销并且会话过期,那么数据库条目将无限期地保留。

我考虑过检测会话过期并运行一个函数以从我的数据库中删除关联的访问令牌,但是如果应用程序未运行时会话过期怎么办。

我认为我需要某种维护,例如 cron 作业或我的数据库上的某些东西,这些东西将在特定时期不被访问后删除文档,

我将如何使用 mongoDB 来解决这个问题?

0 投票
2 回答
65 浏览

javascript - node.js - 无法弄清楚如何使用 session-express 进行会话

我是 node.js 和会话的新手,我试图在 node.js 会话中存储一些值,但是每次我重新加载页面并检查 console.log 会话都没有保存。我的代码:

所以基本上我想要的是,当用户第一次加载页面时,他可以输入一个组织,当他这样做时,这个组织被保存在会话中,所以当他重新加载页面时,组织已经被选中.

我知道我一定是在做一些真正错误和/或糟糕的编码,但我就是想不通。

谢谢!

0 投票
2 回答
3750 浏览

node.js - Express JS - 重置 cookie 过期时间

我正在使用 express-session 来管理会话。我正在使用这个:

现在我想在每次点击我的 url 时将过期值重置为 6。所以我这样做:

但是最大年龄不会重置,并且会话总是在 6 秒内过期,即使 URL 被命中也是如此。如何每次将其更改为 6000?

我在这里先向您的帮助表示感谢

0 投票
1 回答
3258 浏览

node.js - 如何在具有多个服务器的 NodeJS 中检索 SessionID?

我是 NodeJS 的新手。我正在开发一个 REST API 并使用 express-session 来处理会话。因此,要获取我正在使用的会话 ID

var sessionID = req.sessionID

这个 sessionID 是从服务器端生成的。因此,当我扩展到两个或更多服务器时,这是一个问题。例如,如果一台服务器关闭并且请求被重定向到另一台服务器(假设我有一个负载平衡器),则会生成一个新的会话 ID。那么,有没有办法从客户端检索会话 ID?

0 投票
0 回答
1242 浏览

javascript - 如何在 node.js 中使用 express-session 加载特定会话?

我需要创建一个 websocket,我可以从不同的域连接到它(websocket 在 10.0.4.18:8020 上运行,客户端将从 10.0.4.160:443 建立连接。)

每个用户必须有一个唯一的会话才能在身份验证发生后重用他/她的用户数据。

由于客户端“又名用户的浏览器”位于不同的主机上,因此我很难将会话与在页面重新加载事件中创建它的客户端绑定!

我想到了这个解决方法来解决这个问题

  1. 使用来自客户端的函数创建会话XMLHttpRequest(),然后返回一个 sessionID 给客户端
  2. 使用将 sessionId 保存在用户的浏览器中localStorage
  3. 每次用户连接到 websocket 时,将 sessionId 传递给 socket.io。
  4. Websocket 然后获取 sessionId 并重新加载它以使其再次可用。

为了消除会话固定攻击,我将添加更多验证步骤以确保 sessionId 不被使用客户端的 IP 和代理数据劫持。

此外,我需要触发一个setInterval()方法,该方法将每秒调用外部 API 并更新会话变量。

问题

如何正确重新加载会话数据,我可以自动保存变量而无需直接使用 store.get() 加载会话数据并保存它们?

这是我所做的

我使用文件系统创建了会话。对于每个请求,我都必须使用store.get()方法加载会话存储,更新会话数据,然后保存它。但是我遇到的问题是每次我想更新会话时,你可以看到我下面的代码。

这就是我所做的!

0 投票
1 回答
670 浏览

angularjs - express-session 为每个请求创建新的 cookie

所以我正在构建一个前端有 angular 和后端有 nodejs/express 的应用程序。我的问题是,当使用 express-session 时,每个请求都会创建一个新的会话 cookie。

我搜索了很多问题和答案,但似乎大多数已回答的问题都是关于 express 3.x 的问题,而我正在使用 express 4.x。

这是我正在处理的代码:

当我这样做时,console.log我得到了这个:

如您所见,get 和 post 创建了两个不同的会话 cookie。

我实际上不知道我在哪里搞砸了,我已经阅读了很多次代码,以至于变量名开始听起来很有趣。

编辑 我想要完成的事情是创建会话 cookie 并查看“LosGlennos”的会话是否已过期。

0 投票
1 回答
3585 浏览

android - 如何在 node.js 中使用 express 为 android 应用程序实现服务器端会话?

大家好,我正在制作一个android应用程序,我一次有多个帐户登录现在我的问题是我要进行多个登录,我应该使用会话来验证每个登录的帐户用户。现在我在服务器端使用快递我已经阅读了很多关于在 node.js 中存储会话的文档

  1. Express-session(虽然它只适用于开发,但不适用于生产,但不适用于我的应用程序)
  2. Cookie 会话
  3. 连接 Redis
  4. 连接-mongo

我还听说过 json Web 令牌,我可以在其中生成唯一令牌,然后我可以使用 res.json({user_id:"user1", token: "generated_token here"}) 将令牌传递给客户端 我还听说过护照但不知道如何做到这一点,因为在护照中我默认使用 express-session 是否对生产有好处?

现在我的第一个问题是我已经阅读了所有文档,但没有提到我为每个注册的用户创建唯一令牌的地方。第二个问题,当我将我的服务器用于 android 应用程序时,将不会使用 cookie 我将发送用户令牌,如参数 req.body.token 现在如何使用当前 user_id 来计算它。

实际上我没有得到控制流,我的意思是在 node.js 的会话中一切是如何进行的。还有什么是这个秘密是这个东西产生独特的令牌或什么。另外我的意思是现在大约有 100000 名用户注册了我的应用程序,请相应地告诉我我应该为我的应用程序使用哪种方式。

我之前已经问过这个问题,但我没有提到因为我没有制作网站如何做到这一点(在我的情况下不会使用令牌)

我知道我要问的这个问题非常含糊,但请多多包涵,我只是想了解 node.js 中如何使用会话

谢谢 Anways