1

express-sessionモジュールを使用して、Express Node.js プロジェクトでセッション変数を動作させようとしています。エラーは発生せず、セッション変数の設定は機能しているようですが、リクエスト間で持続しません。これが私のコードの簡略化されたビットです:

サーバー.js

var express = require('express');
var bodyParser = require('body-parser');
var session = require('express-session');

var app = express();

app.use(bodyParser.json());
// Sessions
app.use(session({
    secret: config.secret
}));

app.use('/api/projects', require('./controllers/api/projects'));

var server = app.listen(3000, function() {
    console.log('Server listening on', 3000)
});

api/projects.js ルーター

var router = require('express').Router()

router.get('/set', function(req, res, next) {
    req.session.test = "test";
    res.status(200).json({"test":req.session.test});
});

router.get('/current', function(req, res, next) {
    res.status(200).json({"test":req.session.test});
})

変数の設定はうまくいくようです...

/setAPI 呼び出しは、 というセッション変数を設定する必要がありますtest。この API 呼び出しを試してみると、次のように動作するように見えますcurl

curl -X GET localhost:3000/api/projects/set --cookie "connect.sid=s%3AyP3a8siRuA-5jDxWH4T03UxNpFd6lfBq.Ha8b8eJxbtW8fAJlbgR9jumfmBpJIXNE6444fOb2Jro"
{"test":"test"}

これは、コンソール ログでも確認されています。

Session {
  cookie: 
   { path: '/',
     _expires: null,
     originalMaxAge: null,
     httpOnly: true },
  test: 'test' }

...しかし、次回チェックするときは設定されていません

2 回目の API 呼び出しで変数を確認しようとすると、宣言されていないように見えます。

curl -X GET localhost:3000/api/projects/current --cookie "connect.sid=s%3AyP3a8siRuA-5jDxWH4T03UxNpFd6lfBq.Ha8b8eJxbtW8fAJlbgR9jumfmBpJIXNE6444fOb2Jro"
{}

これはコンソール ログで確認され、test変数は設定されなくなりました。

Session {
  cookie: 
   { path: '/',
     _expires: null,
     originalMaxAge: null,
     httpOnly: true } }

セッション変数がリクエスト間で保持されるようにするにはどうすればよいですか?

(PS:私はしばらくこれに行き詰まっていました。答えがわからない場合でも、ヒントや解決策に関する小さなコメントは大歓迎です)

4

1 に答える 1