这是我的设置:
express.js 版本”:“3.0.0rc2”
app.js
...
app.use(express.cookieParser('secret'));
app.use(express.session({secret: 'secret'}));
app.use(app.router);
...
然后设置签名的cookie和重定向:
res.cookie('session', cookie_value, {signed: true});
res.redirect('/else_where');
然后检索签名的cookie:
var cookie = req.signedCookies.session;
console.log('get cookie: ' + req.cookies.session);
console.log('get signed cookie: ' + req.signedCookies.session);
问题是 cookie 是undefined
用于签名的 cookie 并且与req.cookies.session
.
出于某种原因,我没有完成 cookie 的签名。
不知道发生了什么。
我的顺序排列app.use()
正确吗?
类似于这个这个
UPDATE_02
我实现了一个简单res/req
的签名cookie,如下所示:
app.configure(function(){
app.set('port', process.env.PORT || 3000);
app.set('views', __dirname + '/views');
app.set('view engine', 'jade');
app.use(express.favicon());
app.use(express.logger('dev'));
app.use(express.cookieParser('secret'));
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(expressValidator);
app.use(express.session());
app.use(app.router);
app.use(express.static(path.join(__dirname, 'public')));
});
app.get('/', function(req, res) {
if (!req.signedCookies.cat) {
res.cookie('cat', 'boo', {signed: true});
console.log('setting cookie');
res.writeHead(200, {'Content-Type':'text/plain'});
return res.end('cookie set');
}
res.end('signed cookie: ' + req.signedCookies.cat);
});
当我使用浏览器点击时,localhost:3000
我得到了第一个期望的响应cookie set
。
我检查了浏览器 cookie 并且 cookie 已设置。
当我使用相同的浏览器localhost:3000
再次点击时,我得到相同的响应“cookie set”。
该请求似乎没有在 cookie 上获取。
所以在另一个文件中,我复制/粘贴了上面的代码并将端口切换到3080
.
当通过第二个响应时,会产生“签名的 cookie:boo”。
然后,如果我刷新localhost:3000
响应是signed cookie: boo
.
为什么会这样?是否有不应该进行的缓存?
任何帮助表示赞赏。
UPDATE_01
即使我req.signedCookies.session
在设置 cookie 后立即执行操作,我也会返回undefined
。cookie 确实被签名了,因为.
后面有一个附加的一堆随机字母和数字。它没有被分配给req.signedCookies