在Express中更改cookie过期

use*_*657 9 cookies session connect node.js express

因为我在调用expressServer.use(express.session({params}))cookie 时没有定义maxAge,所以将expir 设置为"Session".

我想在登录时添加"记住我"功能.如果选择"记住我",则到期时间将延长至一个月.

我该怎么做呢?我试着简单地扩展maxAge,但这似乎没有做任何事......

expressServer.get '/blah', (request, response) =>
    request.session.cookie.maxAge = 2592000
    response.end 'hello there'
Run Code Online (Sandbox Code Playgroud)

谢谢您的帮助!

**编辑**

我尝试制作一个简单的服务器来测试更新用户的cookie.我正在使用Express 3.0.4

当我访问127.0.0.1:9000/blah时,浏览器cookie的"过期"字段仍然是"会话"...

express = require 'express'

expressServer = express()
expressServer.use express.cookieParser()
expressServer.use express.session
    secret: 'supersecret'
    cookie:
        path: '/'
        httpOnly: true

expressServer.get '/', (request, response) =>
    response.end 'hello'

expressServer.get '/blah', (request, response) =>
    request.session.cookie.maxAge = 3600000
    response.end 'hello again'

expressServer.listen 9000
console.log 'server running'
Run Code Online (Sandbox Code Playgroud)

Grrrrrrr ....

cho*_*ovy 13

我在/登录页面上有一个"记住我"的复选框:

<p class="remember">
  <input type="checkbox" id="remember" name="remember" value="1" />
  <label for="remember">Remember me</label>
</p>
Run Code Online (Sandbox Code Playgroud)

然后在我的POST路由到/ login我做一些健全性检查并设置会话,如果req.body.remember设置,否则它只是一个窗口会话:

  //user is authenticated
  //set session length
  if ( req.body.remember ) {
    var hour = 3600000;
    req.session.cookie.maxAge = 14 * 24 * hour; //2 weeks
  } else {
    req.session.cookie.expires = false;
  }

  req.session.userid = user._id;
Run Code Online (Sandbox Code Playgroud)

在app.js中添加以下几行(我使用redis):

  app.use(express.cookieParser('secret-word'));
  app.use(express.session({
    store: new RedisStore({
      host: cfg.redis.host,
      db: cfg.redis.db
    }),
    secret: 'another-secret'
  }));
Run Code Online (Sandbox Code Playgroud)

  • 对我来说,它在后端更改了会话的 cookie,但实际上并没有更改浏览器中的任何内容:'( (2认同)

小智 5

将 cookie 名称设置为 value,其中可以是字符串或转换为 JSON 的对象。路径选项默认为"/".

res.cookie('rememberme', '1', 
                { expires: new Date(Date.now() + 900000), httpOnly: true });
Run Code Online (Sandbox Code Playgroud)

如需进一步参考,可以使用以下链接

http://expressjs.com/api.html#res.cookie


bor*_*kur 5

如果要在express 4中使用cookie-sessions实现滚动会话,请配置如下的中间件:

app.use(cookieSession({
    secret: your_secret,
    maxAge: your_maxAge,
    key: 'sessionId'
}));
Run Code Online (Sandbox Code Playgroud)

请注意,您无需设置该expires选项.

为了扩展您的会话,只需改变它:

app.get('*', function (req, res, next) {
    req.session.foobar = Date.now();
    next();
}
Run Code Online (Sandbox Code Playgroud)

请注意,在快递4中没有req.session.touch().