0

这是我的设置:

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

4

1 回答 1

1

浏览器中的cookie是:
boo.o5SqHrxUOZkyNLdIBqIZrfog6jXYJkP78M99IMbrnDA

通过更新为 express 3.0.3,cookie 变为: s:boo.o5SqHrxUOZkyNLdIBqIZrfog6jXYJkP78M99IMbrnDA

更新后问题已修复。

于 2012-11-20T22:43:42.157 回答