8

res.cookie と req.cookies の違いがわかりません。さらに奇妙なことに、Cookie を設定しないと、次のことがわかりました。

//The value will be:
req.cookies.uid=="undefined"
//instead of:
req.cookies.uid==undefined

なぜ Express.js はこのように Cookie を設計するのですか?

ユーザーがログインして Cookie の有効期限を無期限または 1 年に設定しようとしているときに、"remember me" 機能を実装したい場合、Cookie を正しく使用するにはどうすればよいですか?

cookieParser は次のようなものしかサポートしていないことがわかりました。

express.cookieParser("secret")

また、expire/maxAge 設定はサポートしていません。

4

3 に答える 3

15

res.cookieは実際には のシグネチャを持つ関数ですres.cookie(key, value, opts)。これを使用して、クライアントの Cookie 値/オプションを設定できます。一方、req.cookiesはクライアントの現在の Cookie 値を提供するオブジェクトです。Cookie を使用してページ ビューを追跡する例を次に示します。

var counter = 0;
app.get('/counter', function(req, res) {
    res.cookie('counter', ++counter);

    if (!req.cookies.counter) {
        res.send('This is your first visit!');
    } else {
        res.send('This is visit number '+ req.cookies.counter +'!');
    }
});

ミドルウェアを使用すると、express.cookieSession()アプリケーション全体のデフォルトの Cookie プロパティを設定できます。たとえば、Cookie のmaxAgeプロパティによって、Cookie が期限切れになるまでのミリ秒数が決まるため、ここでは 1 時間で期限切れになるように設定します。

app.use(express.cookieParser());
app.use(express.cookieSession({ secret: 'secret', cookie: { maxAge: 60 * 60 * 1000 }});
// ... your middleware and routes

それ以外の場合は、オプション オブジェクトを に渡すことで、Cookie オプションを個別に設定できますres.cookie()

于 2012-12-16T22:49:02.187 に答える
0

これはまさにそれを行う高速ミドルウェアです: https://github.com/mdarveau/session-rememberme

于 2015-02-18T03:45:35.230 に答える