【问题标题】:NodeJS - Session handling WITHOUT expressNodeJS - 没有表达的会话处理
【发布时间】:2020-03-19 13:08:58
【问题描述】:

我已经构建了我的应用程序,我在 NodeJS 上使用了纯 JS,它是一个单页应用程序。我没用快递。

首先,用户需要登录。登录数据通过 websocket 发送到服务器,然后根据 MySql-DB 检查凭据。如果它们是正确的,则会生成已登录的内容并将其发送回客户端,并在那里显示。

现在当用户已经登录,然后刷新浏览器,他就进入了应用的初始状态,需要重新登录。

我该如何解决这个问题?

我阅读了很多关于 NodeJS 中的会话处理的文章,但大多数文章都包含 express,这让我无法理解整个概念。

【问题讨论】:

  • 您的服务器必须维护某种数据库,以便将会话 cookie 字符串映射到标识用户会话和会话状态以及其他类似信息的一些信息块。

标签: javascript node.js session session-cookies


【解决方案1】:

HTTP 本身是无状态的,因此您需要某种方式来识别用户。

传统上,这是通过 cookie 完成的。当您响应 HTTP 请求时,您会在响应标头中包含一个 cookie。对于所有后续的 HTTP 请求,客户端将包含此 cookie 信息返回给您。

这意味着您可以发送某种会话标识符,并且对于所有未来的请求,您都可以查找会话数据。对话有点像这样。

客户:这是我的登录信息,我想要主页。

服务器:好的,谢谢。这是主页。另外,请记住您的会话 ID 是 12345。下次您向我要东西时,请告诉我该会话 ID。 (在数据库中记录会话 ID 12345 与某个用户相关联。)

然后……

客户:我想要另一个页面。你让我告诉你我的会话 ID 是 12345。

服务器:(加载 12345 的会话信息,发现它与某个用户相关联。)好的,这是另一个页面。

您如何实际存储所有内容取决于您自己。许多人使用数据库,因为他们通常已经在应用程序中使用它们,并且可以轻松地与应用程序服务器的多个实例共享会话数据。

【讨论】:

  • 谢谢你的解释..但我仍然没有得到任何东西..可以说,用户访问我的网站并登录..然后在客户端上设置一个 sessioncookie 和一些数据,例如一些权限..分配给他的 sessionID 存储在我的数据库中..当用户现在在他的浏览器上点击 F5 时,这个请求是否发送任何 cookie 信息? oO .. 因为如果没有,我需要检查客户端上的 site-init,如果有 cookie,如果有,验证 sessionID 和 aaaaaaaaaahhh .....我想我现在明白了;D。 . 非常感谢;)
  • @Arschibald 是的,所有触发 HTTP 请求的后续页面加载都将在其请求数据中包含该 cookie,直到用户清除其 cookie。
猜你喜欢
  • 1970-01-01
  • 2015-06-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-12
  • 2011-11-25
  • 2019-01-20
  • 2016-04-22
相关资源
最近更新 更多