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

Node.js-会话不会通过res.redirect()持续存在

平庆
2023-03-14
问题内容

我(几乎)成功地将Node.js与Express和Redis结合使用来处理会话。

我遇到的问题是使用时不保留会话res.redirect()

这是我的看到方式:

req.session.username = username.toString();
console.log(req.session);
res.redirect('/home');

console.log()打印:

{ lastAccess: 1322579131762,
  cookie:
   { path: '/',
     httpOnly: true,
     _expires: Tue, 29 Nov 2011 15:06:31 GMT,
     originalMaxAge: 60000 },
  username: 'admin' }

现在,这是以下代码:

app.get('/home', [app.requireLogin], function(req, res, next) {
// Not showing the rest as it's not even getting there
// Instead, here is what's interesting
app.requireLogin = function(req, res, next) {
  console.log(req.session);

这个console.log()打印出:

{ lastAccess: 1322579131775,
  cookie:
   { path: '/',
     httpOnly: true,
     _expires: Tue, 29 Nov 2011 15:06:31 GMT,
     originalMaxAge: 60000 } }

显然,“用户名”对象已消失。该会话没有保留它,而是重新构建了一个新会话。

我该如何解决?如果您需要任何信息,请不要犹豫。

这是我设置会话管理的代码:

app.configure(function() {
  // Defines the view folder and engine used.
  this.set('views', path.join(__dirname, 'views'));
  this.set('view engine', 'ejs');

  // Allow parsing form data
  this.use(express.bodyParser());

  // Allow parsing cookies from request headers
  this.use(express.cookieParser());
  // Session management
  this.use(express.session({
    // Private crypting key
    secret: 'keyboard cat',
    store: new RedisStore,
    cookie: {
      maxAge: 60000
    }
  }));
  this.use(app.router);
});

这是基于gist的整个项目(我的意思是,部分内容):https
:
//gist.github.com/c8ed0f2cc858942c4c3b(忽略渲染视图的属性)


问题答案:

好吧,我找到了解决方案。问题在于,该时间maxAge已添加到当前日期。因此,在浏览器端,cookie被设置为在所示的GMT时间过期。

问题如下:我使用虚拟机测试node.js,并且,您知道…有时会挂起计算机。

好吧,发生的事情是机器的时间晚了两天。因此,无论何时在服务器端设置cookie,客户端都认为cookie已经过期,因为我的主机没有迟到两天。

另一个愚蠢的结果。



 类似资料:
  • 我有个问题,希望你能帮助我。我的控制器中有一个创建CodeIgniter会话的方法。为确保创建正确,我在创建会话后执行函数。然后,在我的Ajax请求中,我放置了一个以刷新页面。 这就是我的方法: 这种方法称为槽式Ajax,如; 最后,在Ajax请求中,我做了,但是当页面刷新时,这将把我重定向到,并且当我想检查包含

  • 问题内容: 我的应用程式资料库类别 Gradle lib: 当我问例如它将给出此错误时,AppDatabase_Impl在我的应用程序类中不存在 问题答案: 对于那些使用 Kotlin的人 ,请尝试在应用中更改为 例如: 还记得添加这个插件 到应用程序级别build.gradle文件的顶部,然后进行清理和重建(根据https://codelabs.developers.google.com/cod

  • 问题内容: 我正在使用Node.js,Express和Redis构建一个用于会话管理的网站。无论出于何种原因,如果我有一个会话变量(在此示例中),并且刷新页面,则不会保存该变量,但是,如果我在设置了变量后调用,则确实会将其保存到Redis(redis- cli监视器显示此内容-不调用表示变量不存在,而调用则显示该变量)。 我正在使用它来设置和启动服务器: 然后,在那条路线中,我有: 由此,我应该能

  • 问题内容: 在CentOS 6.3上与Python 2.7,Apache + mod_wsgi一起运行 当我在localhost上时,一切正常。但是,当我在Azure中的vm上运行代码时,我看不到会话信息在页面之间保留。 基本上我的看法是: 打印输出为: 我对apache的wsgi配置是: 我设置了secret_key: 我尝试同时设置SERVER_NAME,但这无济于事: 关于如何进行更多调试的

  • 我在Tomcat7中有一个web应用程序,它将会话中的用户信息作为DTO对象保存。我还为我的项目启用了Spring Security性,如果用户没有会话,它会自动将用户重定向到登录页面。 如果我登录到应用程序一次,然后在Eclipse中重新启动Tomcat,会发生的情况是,我的会话被冲出,但cookie没有运行。 Edit:尽管Firefox说,但如果关闭并重新启动Firefox,cookie仍然

  • 问题内容: 我正在使用AngularJS框架进行项目。我对使用这个框架很陌生。过去,我只使用纯JavaScript和jQuery。该项目是针对利基市场的一种Web设计器应用程序。 当用户在设计时在页面之间移动时,我希望维护他们所做的所有更改的会话。 现在,如果用户登录,我们将使用数据库中的数据加载会话。当用户单击“保存”按钮时,我们将使用会话数据更新数据库。有人告诉我,我可以在Angular中保持