我有一个AngularJS客户端使用$http()
函数将POST表单数据发送到Express服务器。我希望服务器在客户端设置一个cookie,其中包含用户的电子邮件地址。这就是我存储的全部内容,因此我不需要更强大的服务器端会话。我只使用cookie-session
模块。
问题: Cookie不会在客户端中持久存在。来自同一客户端的后续请求显示一个空的会话变量。
我在设置Cookie后看到了example here并且正在使用req.session.save()
,但它仍然无效。
服务器代码:
// server.js
var express = require('express');
var app = express();
var bodyParser = require('body-parser');
var cookieParser = require('cookie-parser');
var cookieSession = require('cookie-session')
var methodOverride = require('method-override');
// Configuration
app.use(bodyParser.urlencoded({'extended':'true'}));
app.use(bodyParser.json());
app.use(bodyParser.json({ type: 'application/vnd.api+json' }));
app.use(methodOverride('X-HTTP-Method-Override'));
var express = require('express');
var app = express();
// Cookies
app.use(cookieParser());
app.use(cookieSession({
name: 'session', // what should this name match?
resave: true,
saveUninitialized: true,
keys: ['key1', 'key2'] // what do these values need to match?
}));
app.use(function(req, res, next) {
// Create a cookie.
console.log("Session user [before set]: %j", req.session);
req.session.mycookie = "sample data"; // simplified example for illustration
console.log("Session user [after set]: %j", req.session);
// Save session cookie
req.session.save();
});
app.listen(3000);
来自同一客户端的每个请求都会提供输出:
Session user [before set]: {}
Session user [after set]: {"mycookie":"sample data"}
客户端的后续测试显示cookie未持久存在。我甚至使用了Firefox"查看Cookies"插件检查是否创建了任何cookie,而非是。
1。为什么我的cookie不能坚持?我是Express的新手,所以我可能会遗漏一些明显的东西。
2。我使用正确的参数来创建cookieSession吗?我不确定keys
或name
应该是什么。 cookie-session
documentation对此很模糊,我无法在其他地方找到更好的文档。
答案 0 :(得分:0)
原来解决方案很简单!我现在意识到我需要在浏览器的初始请求中包含端口号到服务器(我确实在JavaScript代码中包含了端口号。)
即使没有端口号,浏览器也可以获得初始请求,因为同一台计算机上的另一台Web服务器(不是我的Express服务器)正在为请求提供服务。
只需将端口号添加到浏览器的地址栏即可。当然,然后我需要在服务器上添加另一个Express路由来处理站点的默认页面。在此之后,cookie按预期工作。
希望这个答案能够帮助其他Express新手。