当前位置: 首页 > 面试题库 >

在Express.js中使用会话

陆子航
2023-03-14
问题内容

我需要帮助来了解Web应用程序的会话概念。我正在使用Express 3.0运行Node.js服务器。

我的目标是:

  • 为每个登录的用户创建一个会话

  • 存储此会话,并将其用于验证用户是否已登录(防止同时使用同一用户的两个设备)并限制对某些页面的访问(通过将会话ID与其他数据匹配)

我将使用MemoryStore保存会话(似乎最简单)。如果上述目标有意义,您能否提供有关如何实现这些目标的详尽解释?


问题答案:

Express
在github仓库中有很好的例子。其中之一负责身份验证,并说明如何将用户附加到req.session对象。这是在app.post('/login')路线内部完成的。

要限制对某些页面的访问,请向这些路由添加一个简单的中间件

function restrict(req, res, next) {
  if (req.session.user) {
    next();
  } else {
    req.session.error = 'Access denied!';
    res.redirect('/login');
  }
}

app.get('/restricted', restrict, function(req, res){
  res.send('Wahoo! restricted area, click to <a href="/logout">logout</a>');
});

正如布兰登已经提到的那样,您不应在生产中使用MemoryStore。Redis是一个很好的选择。使用connect-redis访问数据库。一个示例配置如下所示

var RedisStore = require('connect-redis')(express);

// add this to your app.configure
app.use(express.session({
  secret: "kqsdjfmlksdhfhzirzeoibrzecrbzuzefcuercazeafxzeokwdfzeijfxcerig",
  store: new RedisStore({ host: 'localhost', port: 3000, client: redis })
}));


 类似资料:
  • 问题内容: 使用Express.js,会话非常简单。我很好奇它们实际上是如何工作的。 它在客户端上存储一些cookie吗?如果是这样,我在哪里可以找到该Cookie?如果需要,如何解码? 我基本上希望能够查看用户是否已登录,即使当时用户实际上不在该站点上(例如,当您在其他站点上时,facebook如何知道您已登录)。但是我想了解的是,我应该首先了解会议的工作方式。 问题答案: 我从未使用过Expr

  • 问题内容: http://www.javascriptkit.com/javatutors/cookie.shtml 另一方面,仅会话cookie将信息存储在浏览器内存中,并且在浏览器会话持续时间内可用。换句话说,从存储时间到关闭浏览器之前,都可以使用会话cookie中存储的数据。在此期间在页面之间移动不会删除数据。 如何使用Express.js做到这一点? 问题答案: 以下是我想要的(某种)。当

  • 问题内容: Node.js有点新,所以我几乎无法在Internet上找到东西。我已经解决了。这是因为我是使用来从客户端呼叫的。但是,当我在下面的代码中尝试使用它时,它永远不会呈现。初始页面是/ contact,当我调用/ contact / sendEmail时,/ contact / sendEmail中的所有功能都可以使用,但渲染时不起作用。完全没有错误。就像什么都没有发生。 它被这个函数调用

  • 问题内容: 我正在尝试为Express.js创建一个中间件,以将所有非安全(端口80)通信重定向到安全SSL端口(443)。不幸的是,Express.js请求中没有任何信息可让您确定该请求是否来自http或https。 一种解决方案是重定向 每个 请求,但这不是我的选择。 笔记: 没有可能用Apache或其他东西来处理它。它 必须 在节点中完成。 应用程序中只能启动 一台 服务器。 您将如何解决?

  • 问题内容: 如何使 connect.sid cookie本身仅是会话cookie,而不是持久性cookie? 我尝试失败 但是cookie仍具有到期时间戳。 问题答案: 以上工作。因此,通过将maxAge设置为null,我确实管理了expressjs以使用会话cookie。ew

  • 问题内容: 我正在尝试让HTTPS在node.express.js上工作,但我无法弄清楚。 这是我的代码。 当我运行它时,它似乎仅响应HTTP请求。 我写了简单的基于香草的HTTPS应用程序: 当我运行此应用程序时,它 确实 响应HTTPS请求。请注意,我认为fs结果上的toString()并不重要,因为我使用了两者的组合,但仍然没有es bueno。 编辑添加: 对于生产系统,最好使用Nginx