这是我的设置:
express.js version“:”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,Cookie为undefined
,并且与req.cookies.session
一起使用。
出于某种原因,我没有播放cookie的签名
不确定发生了什么。
我的app.use()
的顺序是否正确布局?
类似于此this
UPDATE_02
我为签名的Cookie实现了一个简单的res/req
,如下所示:
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
当这经历了第二个响应产生`signed cookie:boo'。
然后,如果我刷新localhost:3000
,则回复为signed cookie: boo
为什么会这样?是否有缓存不应该?
任何帮助表示赞赏。
UPDATE_01
即使我在设置完cookie后立即执行了req.signedCookies.session
,我也会回来undefined
。 Cookie确实已签名,因为还有一个.
后跟一堆随机字母和数字。它没有被分配到req.signedCookies
答案 0 :(得分:1)
浏览器中的cookie是:
boo.o5SqHrxUOZkyNLdIBqIZrfog6jXYJkP78M99IMbrnDA
通过更新以表达3.0.3,cookie变为:
s:boo.o5SqHrxUOZkyNLdIBqIZrfog6jXYJkP78M99IMbrnDA
更新后问题已解决。