Node.js Express Ajax 会话

8

我在使用Express和Ajax的时候遇到了问题。我的应用程序通过Ajax(POST和GET)接收请求并设置会话变量。如果请求不是通过Ajax发出的,则会话正常工作。相反,如果是通过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。

我的 Express 设置:

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 路由的代码,那可能有助于诊断问题。 - hunterloftis
问题出在端口上,为了使它正常工作,我必须在Ajax调用中将withCredentials标志设置为true。然后在服务器端,我必须添加res.header('Access-Control-Allow-Credentials', 'true');一切都好了。 - mbouclas
1个回答

7

在 Node.js 上:

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

关于ajax:

xhr.withCredentials = true;

1
这个到底是做什么的? - Kenny Worden

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接