2017-05-10 18 views
1

私はシステムでライブセッションを維持するためにexpressとredisを使用しています。私はsessionCookieにmaxAgeを設定するいくつかの問題があります。デフォルトではそれは24時間だと読んでいますが、それはそれを存続させるのに長い時間です。私は30分のように設定して、ユーザーをログアウトしたい、私はそれが動作するが、何も起こらないかどうかを確認するために1分変わった、ユーザーはまだログに記録した。Expire time expressとredis session

これは私のセッション機能である:

module.exports.initSession = function(app, db) { 
    app.use(session({ 
    saveUninitialized: true, 
    resave: false, 
    secret: config.sessionSecret, 
    cookie: { 
     maxAge: 30*10000, 
     httpOnly: true, 
     secure: Boolean(process.env.ssl) || true 
    }, 
    key: config.sessionKey, 
    store: new RedisStore({ 
     host: config.redis.host || 'localhost', 
     port: config.redis.port || 6379, 
     db: config.redis.database || 0, 
     pass: config.redis.password || '' 
    }) 
    })); 
}; 

私はまた、代わりにMAXAGEのTTLを使用してみましたが、私は同じ結果を得ます。どうなり得るか?私はSEAN.JSを使用して

とそのコンテンツセッションをファイルには、この2つです:

を編集 express.jsdefault環境。

+0

30分にしたい場合は、10000 * 30 = 5分でなく1000 * 60 * 30に設定する必要があります。さらに、私は確信していませんが、あなたはあなたのセッションを設定する前にクッキーパーサーを初期化しなければならないと思う、あなたは、cookieベースのvar cookieParser = require( 'cookie-parser'); (cookieParser()) – FluffyNights

+0

@FluffyNightsの「cookie-parser」はもはや必要ありません[ノートを参照](https://www.npmjs.com/package/express-session#sessionoptions)。 – robertklep

+0

私が使用しているフレームワークを示すために私の質問を編集しました – Ellebkey

答えて

1

これはセッション用の設定であり、動作します。
私は、テスト目的で有効期限を5秒に設定しました。

app.use(session({ 
     store: new redisStore({ 
     host: 'localhost', 
     port: 6379, 
     client: redisClient, 
     ttl: 5 // in seconds 
    }), 
    secret: 'this is secret', 
    resave: false, 
    saveUninitialized: true, 
    // cookie: {maxAge: 5000} 
})); 

私はmaxAgeを設定し、それがうまくいかなかったと私はttlを設定したときにそれが働きました。

注:ttlは2番目にありますが、maxAgeはミリ秒で表示されています。

パスポートオブジェクトが存在するかどうかを確認するために、以下のようなミドルウェアを使用してセッションデータを記録することができます。sesssionデータにパスポートオブジェクトがない場合、ユーザーはログアウトされます。

app.use((req, res, next) => { 
    console.log('session:\n', req.session); 
    next(); 
}); 
+0

私は実際には 'cookie:{maxAge:}'を持っていて、ttlと同じように動作します。セッションは終了しますが、システムにログオンしているので、手動でログアウトする必要があります。 – Ellebkey

+0

@Ellebkeyあなたはログインシステムを正しく扱っていますか?私はパスポートを使用しています。ミドルウェアを使用してすべてのセッションデータを記録して、セッション内に認証日が存在するかどうかを確認します。 –

+0

これは、シアンスタック[ここ](https://github.com/seanjs-stack/seanjs/blob/master/modules/users/server/config/user.server.config)でシリアライズがどのように機能するかを示しています。js) – Ellebkey

関連する問題