req.signedCookies没有在expressJS中读取

时间:2012-11-19 21:01:51

标签: cookies express

这是我的设置:

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

1 个答案:

答案 0 :(得分:1)

浏览器中的cookie是:
boo.o5SqHrxUOZkyNLdIBqIZrfog6jXYJkP78M99IMbrnDA

通过更新以表达3.0.3,cookie变为: s:boo.o5SqHrxUOZkyNLdIBqIZrfog6jXYJkP78M99IMbrnDA

更新后问题已解决。