2

node.js セッションを Cookie に保存するためにconnect/express を使用しようとしてcookieSession()います (したがって、サーバー側のセッション ストアを回避します)。これは、ユーザーがログインしたときにユーザーを「記憶」し、サーバーの再起動後もセッションを維持するのに役立ちます。

私はこれをしたいと思いますcookieSession()

app.use( express.cookieSession( { secret: 'secret_key' } ) );
app.use( function (req, res, next) {
    if ( req.method == 'POST' && req.url == '/login' ) {
      if ( req.body.remember ) {
        req.session.cookie.maxAge = 30*24*60*60*1000; // Rememeber 'me' for 30 days
      } else {
        req.session.cookie.expires = false;
      }
    }
    next();
});

ただし、req.session.cookie が定義されていないため、これは機能しません。また、次のことも試しましたが、うまくいかないようでした。

app.use( express.session( { secret: 'secret_key' } ) );
app.use( function (req, res, next) {
    if ( req.method == 'POST' && req.url == '/login' ) {
      if ( req.body.remember ) {
        req.cookies['connect.sess'].maxAge = 30*24*60*60*1000; // Rememeber 'me' for 30 days
      } else {
        rreq.cookies['connect.sess'].expires = false;
      }
    }
    next();
});
4

6 に答える 6

2

で始まる

app.use(express.cookieSession({ secret: config.server.cookieSecret }));

そして、それをに変更します

app.use(function(req, res, next) {
  express.cookieSession({
    secret: config.server.cookieSecret,
    cookie: {
      maxAge: req.param('remember') ? 20000 : 3000
    },
  })(req, res, next);
})

そのため、cookieSession ミドルウェアをラップする独自のミドルウェアを作成し、パラメーターに基づいて maxAge を変更します。

したがって、セッションを変更するときはいつでもrememberbodyquery、またはに a を渡す必要がありますparams(これがreq.param()look です)。ほとんどの場合、user_idセッションに a を設定するのは、ログイン時に 1 回だけです。

テストして動作することを確認するのに 3 秒または 20 秒かかります。

繰り返しになりますが、セッションに多くのものを設定している場合はあまり役に立たないかもしれませんが、ログイン時にセッションに user_id を設定するだけであれば、これで十分です。

セッションに多くのものを設定している場合は、リクエストごとにデータが渡されることを知っておく必要があります.user_idなどの最小限のデータのみをセッションに保存し、リクエストごとに必要なデータを検索して保持する必要があります.ユーザーのオーバーヘッドが減少します。

于 2014-01-28T17:21:24.517 に答える
1

私はこれがあなたが望むことをするだろうと思います:

// Using express.session instead of express.cookieSession
app.use(express.session({ secret : 'secret_key' }));

app.use( function (req, res, next) {
  if ( req.method === 'POST' && req.url === '/login' ) {
    if ( req.body.remember )
    {
      req.session.cookie.maxAge = 30*24*60*60*1000;
      // needed to make the session `dirty` so the session middleware re-sets the cookie
      req.session.random = Math.random();
    }
    else
    {
      req.session.cookie.expires = false;
    }
  }
  next();
});

cookieSessiondel req.session.cookie(理由はわかりませんが)のようなファンキーなことをします。

于 2013-03-19T18:38:56.383 に答える
0

req.session.cookieを設定できるように、最初に設定する必要がありますmaxAge。設定する前に使用しようとすると、req.session.cookie is undefined

express.cookieSession受け入れるデフォルト値があります。ここを参照してください。使用するすべてのパラメーターについて言及する必要があります。次の方法でCookieを設定できます。

app.use(express.cookieSession({ secret: 'secret_key', cookie :{ path: '/', httpOnly: true, maxAge: 30*24*60*60*1000} });
于 2013-03-19T17:29:39.817 に答える
-1

Yummy では、作成後に Cookie の有効期限を変更できるようです。

于 2013-04-17T21:49:19.307 に答える