16

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

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

どうすればこれを行うことができますか?maxAgeを拡張してみましたが、何も起こらなかったようです...

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

助けてくれてありがとう!

**編集**

ユーザーのCookieの更新をテストするための簡単なサーバーを作成してみました。Express3.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'

Grrrrrrr...。

4

5 に答える 5

17

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

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

次に、/ loginへのPOSTルートで、健全性チェックを実行し、設定されている場合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'
  }));
于 2012-12-27T04:55:24.557 に答える
5

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

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

リンクをたどってさらに参照するには、使用することができます

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

于 2013-08-21T09:20:52.013 に答える