0

セッションが正しく保存されているかどうかと、node.js の Express.io (すべて最新バージョン) では、ブラウザーによって異なります。この不正行為を修正するにはどうすればよいですか?

コード:

app.get('/home', function(req, res) {
    req.session.variable = 'value';
    req.session.save(function() {
        console.log(req.session);
    });
    res.send('<script src="/socket.io/socket.io.js"></script>\
              <script>var socket = io.connect();</script>\
              Home content');
});

app.io.route('disconnect', function(req) {
    console.log('-------------------------------');
    console.log(req.session);
    req.session.variable = '';
    req.session.save(function() {
        console.log(req.session);
        console.log('-------------------------------');
    });
});

状況: ページにいて、/homeページをリロードします。リロード後の Chrome を除くすべての (?) ブラウザーでのコンソールの出力:

{ cookie:
   { path: '/',
     _expires: Mon May 19 2014 01:40:59 GMT+0200,
     originalMaxAge: 31536000000,
     httpOnly: true },
  variable: 'value' }

// RELOAD:

-------------------------------
{ cookie:
   { originalMaxAge: 31536000000,
     expires: '2014-05-18T23:40:59.399Z',
     httpOnly: true,
     path: '/' },
  variable: 'value',
  touch: [Function],
  resetMaxAge: [Function],
  save: [Function],
  reload: [Function],
  destroy: [Function],
  regenerate: [Function] }
{ cookie:
   { originalMaxAge: 31536000000,
     expires: '2014-05-18T23:40:59.399Z',
     httpOnly: true,
     path: '/' },
  variable: '',
  touch: [Function],
  resetMaxAge: [Function],
  save: [Function],
  reload: [Function],
  destroy: [Function],
  regenerate: [Function] }
-------------------------------
{ cookie:
   { path: '/',
     _expires: Mon May 19 2014 01:41:03 GMT+0200,
     originalMaxAge: 31536000000,
     httpOnly: true },
  variable: 'value' }

Chrome の場合:

{ cookie:
   { path: '/',
     _expires: Mon May 19 2014 00:43:37 GMT+0200,
     originalMaxAge: 31536000000,
     httpOnly: true },
  variable: 'value' }

// RELOAD

{ cookie:
   { path: '/',
     _expires: Mon May 19 2014 00:43:37 GMT+0200,
     originalMaxAge: 31536000000,
     httpOnly: true },
  variable: 'value' }
-------------------------------
{ cookie:
   { originalMaxAge: 31536000000,
     expires: '2014-05-18T23:36:58.926Z',
     httpOnly: true,
     path: '/' },
  variable: 'value',
  touch: [Function],
  resetMaxAge: [Function],
  save: [Function],
  reload: [Function],
  destroy: [Function],
  regenerate: [Function] }
{ cookie:
   { originalMaxAge: 31536000000,
     expires: '2014-05-18T23:36:58.926Z',
     httpOnly: true,
     path: '/' },
  variable: '',
  touch: [Function],
  resetMaxAge: [Function],
  save: [Function],
  reload: [Function],
  destroy: [Function],
  regenerate: [Function] }
-------------------------------

これは Chrome のバグであり、express.io ではないのでしょうか? また、Chrome のログの順序が他のブラウザと異なるのも奇妙です。

私が必要とするのは、ユーザーが特定のページから移動した場合 (その変数を設定する)、セッション変数を削除/空にする必要があることです。

4

1 に答える 1

0

クライアント側でアンロード時に切断を同期するようにこの設定を設定することで、ずっと前に問題を解決したと思います。

var socket = io.connect('your-socket-url.com', {
    'sync disconnect on unload': true
});
于 2013-10-04T00:05:19.800 に答える