【问题标题】:determine when cookie will expire with node Request module使用节点请求模块确定 cookie 何时过期
【发布时间】:2016-12-30 02:36:49
【问题描述】:

我正在编写一个通过抓取外部域来构建 API 的应用程序。为了抓取域,我的服务器必须经过授权(使用会话 cookie)。

我正在使用带有 cookie jar 的 request module 来跨请求维护 cookie。

我想设置一些 Node 路由器中间件,这样,如果/当会话过期时,我可以重新运行我的身份验证方法。这样想:

export function validate(req, res, next) {
    const cookie = cookieJar.getCookie('**target domain**');
    const COOKIE_IS_EXPIRED = // ???
    if ( COOKIE_IS_EXPIRED ) {
        authenticate().then(next);
    } else {
        next();
    }
}

当我注销cookieJar.getCookies() 的内容时,我的结果类似于以下内容:

[ Cookie="lw_opac_1=1483019929431275955; Expires=Wed, 29 Mar 2017 13:58:49 GMT; Max-Age=7776000; Path=/opac; hostOnly=true; aAge=0ms; cAge=6345ms",
  Cookie="lw_opac=ta4tscsejs6c94ngikt7hlbcn0; Path=/; hostOnly=true; aAge=0ms; cAge=6347ms" ]

如何验证两个 cookie 何时接近/已过期,然后重新运行我的身份验证功能?

谢谢!

【问题讨论】:

  • my post 回答你的问题了吗?

标签: node.js session express cookies


【解决方案1】:

您可以使用 npm 中的 cookie 模块来解析 cookie。

所以,例如当你有一个像你发布的字符串时:

var c = "lw_opac_1=1483019929431275955; Expires=Wed, 29 Mar 2017 13:58:49 GMT; Max-Age=7776000; Path=/opac; hostOnly=true; aAge=0ms; cAge=6345ms";

然后运行:

console.log(cookie.parse(c));

将导致打印:

{ lw_opac_1: '1483019929431275955',
  Expires: 'Wed, 29 Mar 2017 13:58:49 GMT',
  'Max-Age': '7776000',
  Path: '/opac',
  hostOnly: 'true',
  aAge: '0ms',
  cAge: '6345ms' }

您可以使用Max-AgeExpires 字段并使用moment 解析它们并将它们与当前时间进行比较。

使用moment,您可以将给定日期与今天进行比较,并获得相差的小时数或天数。例如:

moment().isAfter(someDate);

会告诉你该日期是否已经过去(所以如果是过期日期,那么它会告诉你 cookie 是否已过期)。

见:

【讨论】:

  • 谢谢!这并没有完全回答我的问题,但让我到了可以弄清楚的地步。干杯! :-)
【解决方案2】:

@rsp 回答正确。但是,如果您要维护访问安全令牌,您应该继续使用 csrf 令牌,它会自动维护客户端 cookie 并为新会话生成令牌。更多详情http://www.senchalabs.org/connect/csrf.html

【讨论】:

  • 感谢您的提示。幸运的是,这与帐户安全无关——我只需要维护与服务器的会话,而不是凭据。
猜你喜欢
  • 2019-11-14
  • 1970-01-01
  • 1970-01-01
  • 2011-11-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-29
  • 1970-01-01
相关资源
最近更新 更多