【问题标题】:node.js express ajax sessionsnode.js 表达 ajax 会话
【发布时间】:2013-01-19 18:07:31
【问题描述】:

我遇到了 express 和 ajax 会话的问题。我的应用程序通过 Ajax(POST 和 GET)接收请求并设置会话变量。如果请求不是来自 ajax,虽然会话可以正常工作,但在相反的情况下,它们就无法正常工作。例如:

if (typeof req.session.id == 'undefined'){
req.session.id = 1;

}

else {
req.session.id++;
 } 
res.send({session:req.session.id});

现在当我执行 localhost:3000/ 一切正常时,它每次都会递增。如果我通过 $http 从 Angular 做同样的事情,我会一直得到 1。我在 PHP 中尝试了相同的操作,以防 Angular 出现问题,但它工作得很好。请注意,ajax 调用来自 localhost:80

我的快速设置:

app.use(express.bodyParser());
app.use(express.cookieParser('secret'));
app.use(express.cookieSession({secret:'mySecret'}));
app.use(express.session({store:new express.session.MemoryStore(),maxAge : new Date(Date.now() + 3600000)}));
app.use(app.router)

编辑

通过执行 console.log(req);我注意到,当我不是来自 AJAX 时,我得到:

 cookies:

{ PHPSESSID: 'jm2p2kn7etmofrp48s8sv4pu47', ZDEDebuggerPresent: 'php', '': 'phtml', user_admin: 'MTUzOnJvb3Q6U2ptaHJpZmllaG8=', 'connect.sess': 's:j:{"id":7}.oIAoC356/z4fQ++iH44N7YxWZWEP49bTHp1h/gpAEly' }

但是当我来自 AJAX 时,我得到 {}

【问题讨论】:

  • 据我所知,node / express 不会区分 XHR/非 XHR 请求,除非您明确更改某些内容。如果您发布 ajax 路由的代码,这可能有助于诊断问题。
  • 问题出在端口上,为了使其正常工作,我必须在 ajax 调用中将 withCredentials 标志设置为 true。然后在服务器端,我必须添加 res.header('Access-Control-Allow-Credentials', 'true');一切都很好。

标签: ajax node.js


【解决方案1】:

在 node.js 上:

res.header('Access-Control-Allow-Credentials', 'true');

在 ajax 上:

xhr.withCredentials = true;

【讨论】:

  • 这到底是做什么的?
猜你喜欢
  • 2012-02-08
  • 2011-08-27
  • 1970-01-01
  • 1970-01-01
  • 2014-01-10
  • 1970-01-01
  • 1970-01-01
  • 2014-07-13
  • 2012-02-09
相关资源
最近更新 更多