NodeJS 在Express中更改cookie过期

vyswwuz2  于 2023-05-22  发布在  Node.js
关注(0)|答案(5)|浏览(100)

因为我在调用expressServer.use(express.session({params}))时没有定义maxAge,所以cookie的过期时间被设置为“Session”。
我想在登录时添加“记住我”功能。如果选择了“记住我”,有效期将延长至一个月。
我该怎么做呢?我尝试简单地扩展maxAge,但似乎没有做任何事情...

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

我试着做一个简单的服务器来测试更新用户的cookie。我用的是Express 3.0.4
当我访问127.0.0.1:9000/blah时,浏览器cookie的“expires”字段仍然是“session”...

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'
hm2xizp9

hm2xizp91#

我在/login页面上有一个复选框,上面写着“记住我”:

<p class="remember">
  <input type="checkbox" id="remember" name="remember" value="1" />
  <label for="remember">Remember me</label>
</p>

然后在我的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;

在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'
  }));
ibrsph3r

ibrsph3r2#

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

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

如需进一步参考,请使用以下链接
http://expressjs.com/api.html#res.cookie

hgncfbus

hgncfbus3#

如果你想在express 4中实现cookie-sessions的滚动会话,可以这样配置中间件:

app.use(cookieSession({
    secret: your_secret,
    maxAge: your_maxAge,
    key: 'sessionId'
}));

请注意,您不需要设置expires选项。
为了延长您的会话,只需像这样更改它:

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

注意,在表达式4中没有req.session.touch()

vdgimpew

vdgimpew4#

我找到了一个似乎对我有效的answer;将其添加到路线的顶部。

app.all '*', (req,res,next) ->
  if req.method is 'HEAD' or req.method is 'OPTIONS'  
    next()
  else
    req.session._garbage = Date();
    req.session.touch();
    next();
llmtgqce

llmtgqce5#

或者你可以试试这个,它为我工作:

if ( req.body.remember ) 
{
    var oneWeek = 7 * 24 * 3600 * 1000; //1 weeks                    
    req.session.cookie.expires = new Date(Date.now() + oneWeek);
    req.session.cookie.maxAge = oneWeek; 
}

相关问题