【问题标题】:How does session work in express.js会话在 express.js 中如何工作
【发布时间】:2016-08-23 15:08:46
【问题描述】:

我来自 php 背景,所以没有任何框架,我只需执行 session_start() 并在用户登录后执行 session['username'] = 'sam' 并在每条路线中检查是否 session['username']存在与否,否则重定向到登录页面。

但在 express 中,我看到了很多选项,例如在 express-session npm 中

var session = require("express-session");
var sessionMiddleware = session({
    secret: "secret",
    resave: true,
    saveUninitialized: true,
    maxAge:365 * 24 * 60 * 60 * 1000
});

这个npm也生成cookie,为什么cookie会出现在这里?如果你使用 session 为什么你需要使用 cookie?我很困惑。

【问题讨论】:

  • 那么您认为 php 会话如何工作? php如何区分2个不同的客户端?
  • @zerkms 2 个不同的 cilents 是什么意思?不知道。教我大师。

标签: javascript node.js session cookies


【解决方案1】:

HTTP 是一种无状态协议。它不能自行识别用户或会话。那么大多数语言平台是如何做到这一点的呢?他们为该用户生成一个唯一 ID 并将其存储在 cookie 中。他们将所有会话数据存储在服务器端,使用该唯一 ID 来区分用户会话。

所以在 PHP 中,当您执行 session_start() 时,它会生成一个名为 PHPSESSID 或类似名称的 cookie。然后 PHP 根据该密钥将所有会话数据存储在服务器上的文件或数据库中。每次用户访问不同的页面时,PHP 都会读取该 cookie 的值并获取 ID。基于该 ID,PHP 检索会话数据并将其作为$_SESSION 提供。

几乎所有的 Web 框架都是如此,包括 express。

【讨论】:

  • 很好的解释,但是当你提到会话时,它实际上与cookie有关吗?我见过有人将会话 cookie 存储在文件服务器或数据库中,为什么?在服务器端的内存中还不够吗?
  • 是的,它可以存储在内存中,但内存可能是易失性的,持久性较差。
  • @masnum 所以建议将会话cookie存储在数据库中?这使得每个请求都需要从数据库调用。
  • 是的,但仍然有很多人这样做。为了持久性和可靠性。
  • 真的吗?我没有看到在 angularjs 这样的新框架中实现或实践
猜你喜欢
  • 2011-07-28
  • 1970-01-01
  • 1970-01-01
  • 2012-12-22
  • 2011-11-10
  • 2013-02-12
  • 2011-02-26
相关资源
最近更新 更多