3

Connect の を使用して Cookie を設定していますcookieSession()。これは、「s:j:{}.8gxCu7lVJHVs1gYRPFDAodK3+qPihh9G3BcXIIoQBhM」のような値を返し、Cookie のシークレット値を暗号化するようです。

Cookie の値を解読するにはどうすればよいですか?

コード例:

app.use(express.bodyParser());
app.use(express.cookieParser());

app.get('/setcookie', function(req, res, next){
    res.app.use(express.cookieSession({ key: "test", secret: "test" }));
    console.log(req.cookies.test);
    res.end();
});

app.get('/', function(req, res, next){
    console.log(req.cookies.test);
    res.end();
});
4

1 に答える 1

4

うーん... Cookie セッションの使用について少し混乱しているようです。

  1. あなたの/setcookieパスはクッキー/セッション値を設定しません。req.sessionCookie セッションを使用するには、たとえばにいくつかの値を設定する必要がありますreq.session.message = "Hi there!"。これらの値は現在、Cookie に保存されています。

  2. 1 つのコールバックだけではできませんres.app.use()。この方法では、リクエスト セッションは他の場所では機能しません。これらの Cookie を別のリクエストで読み取るにはapp.use(express.cookieSession({ key: "test", secret: "test" }));、 をアプリケーション レベルに置きます。

編集:実際に私はあなたの res.app.use() 呼び出しについて考えました/setcookie. 特定のリクエストにのみ cookieSession ミドルウェアを追加する場合は、次の手順を実行する必要があります。

yourParser = express.cookieSession({ key: "test", secret: "test" });
app.get('/', yourParser, ...);
app.get('/setcookie', yourParser, ...);

解決

これは実際の固定ソースです。

app.use(express.bodyParser());
app.use(express.cookieParser());
app.use(express.cookieSession({ key: "test", secret: "test" }));

app.get('/setcookie', function(req, res, next){
    req.session.message = "Hellau there";
    res.end();
});

これらの値を調べるには、次をapp.get('/',...)試してください。

app.get('/', function(req, res, next){
    console.log(req.session); //Yay, this will be available in all requests!
    res.end();
});

デバッグ

また、Cookie に保存されているものを手動でデコードする方法についての質問に答えるには、以下を参照してconnect/lib/middleware/cookieSession.jsください。

// cookieParser secret
if (!options.secret && req.secret) {
  req.session = req.signedCookies[key] || {};
} else {
  // TODO: refactor
  var rawCookie = req.cookies[key];
  if (rawCookie) {
    var unsigned = utils.parseSignedCookie(rawCookie, secret);
    if (unsigned) {
      var originalHash = crc16(unsigned);
      req.session = utils.parseJSONCookie(unsigned) || {};
    }
  }
}

それはreq.cookies[key](基本的にあなたがすでにやっていること(req.cookies.test))を取り、それをにポップし、それをutils.parseSignedCookieにポップしutils.parseJSONCookieます。

生の Cookie 文字列を utils.js ファイルの最後に挿入します。

var signed = exports.parseSignedCookie(
    's:j:{}.8gxCu7lVJHVs1gYRPFDAodK3+qPihh9G3BcXIIoQBhM'
  , 'test');
var parsed = exports.parseJSONCookie(signed);
console.log(parsed);

そしてそれを実行しました。私が得たものを推測してください:

{}

なんで?req.sessionオブジェクトに何も設定しないためです。:)

于 2012-07-29T21:40:28.770 に答える