express.cookieParser express.session区别
发布于 1年前 作者 156032zhang 1408 次浏览

app.use(express.cookieParser({secret :’123123123123123’})); app.use(express.session({secret :’123123123123123’}));

请问这两有什么区别?secret 是什么东西?谢谢

3 回复

加密的密钥

当我们向浏览器发送cookie的时候,会调用cookieParser里面的secret来加密。 如果cookieParser设置了secret,session那边可以不用设置。

cookieParser的secret是用来加密nodejs往浏览器端发送的cookie。 session的secret是用来加密会话cookie的。 两者可以不一样,也可以一样。

如果有错,欢迎指正~~

@haiyang5253 我的理解, cookieParser是解析客户端请求时一并发送的cookie,并设置请求对象(req)的cookies、signedCookies属性:

module.exports = function cookieParser(secret, opt){
  return function cookieParser(req, res, next) {
    if (req.cookies) return next();   // 如果已经设置了cookies属性,跳过本middleware
    var cookies = req.headers.cookie;

    req.secret = secret;
    req.cookies = {};
    req.signedCookies = {};

    if (cookies) {
      try {
        req.cookies = cookie.parse(cookies, opt);   // 分析cookies
        if (secret) { // 如果cookies是加密的 
          req.signedCookies = parse.signedCookies(req.cookies, secret);  // 解析加密的cookies
          req.signedCookies = parse.JSONCookies(req.signedCookies); // 并转为对象
        }
        req.cookies = parse.JSONCookies(req.cookies); //  req.cookies现在是一个对象(key-value)
      } catch (err) {
        err.status = 400;
        return next(err);
      }
    }
    next();
  };
};

session中间价则会加密sessionID(如果设置了secret的话),并发送相应的cookie给客户端:

var val = 's:' + signature.sign(req.sessionID, secret);
      debug('set-cookie %s', val);
      res.cookie(name, val, cookie.data);
      writeHead.apply(res, arguments);

ps: 看的是比较新的代码(cookie-parser模块、express-session模块),不清楚老的express是如何实现的(猜测新版本功能不变,只是拆成了若干模块)。

回到顶部