web-dev-qa-db-ja.com

ExpressでCookieの有効期限を変更する

expressServer.use(express.session({params}))を呼び出すときにmaxAgeを定義しなかったため、Cookieの有効期限は「セッション」として設定されています。

ログイン時に「記憶する」機能を追加したいのですが、「記憶する」を選択した場合、有効期限は1ヶ月に延長されます。

これを行うにはどうすればよいですか?私は単に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'

Grrrrrrrr ....

11
user1161657

/ loginページに「remember me」というチェックボックスがあります。

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

次に、私のPOST route to/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'
  }));
14
chovy

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();
}
_

Express 4にはreq.session.touch()がないことに注意してください。

5
borisdiakur

Cookie名を値に設定します。これは、JSONに変換された文字列またはオブジェクトです。 pathオプションのデフォルトは"/"です。

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

リンクをたどるさらなる参照のために使用することができます

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

4

私は 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();
2
Hitchcott

またはあなたはこれを試すことができます、それは私のために働きました:

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; 
}
0
sumitjainjr