概要
Express.js は、Cookie を使用してセッション ID (暗号化署名付き) をユーザーのブラウザーに保存し、その後の要求でその Cookie の値を使用して、サーバーに保存されているセッション情報を取得します。このサーバー側ストレージは、メモリ ストア (デフォルト) または必要なメソッドを実装するその他のストア ( connect-redisなど) にすることができます。
詳細
Express.js/Connect は を使用して 24 文字のBase64文字列を作成しutils.uid(24)
、 に格納しreq.sessionID
ます。この文字列は、Cookie の値として使用されます。
クライアント側
署名付き Cookie は常にセッションに使用されるため、Cookie の値は次の形式になります。
[sid].[signature]
[sid] はセッション ID で、[signature] はセッション ミドルウェアの初期化時に提供された秘密鍵を使用して [sid] に署名することによって生成されます。署名ステップは、改ざんを防ぐために行われます。[sid] を変更してから [signature] を再作成することは、使用されている秘密鍵を知らずに計算上実行不可能である必要があります。[sid] の変更が必要ない場合、セッション cookie は依然として盗難や再利用に対して脆弱です。
このクッキーの名前は
connect.sid
サーバ側
cookieParser
およびミドルウェアの後にハンドラーが発生するsession
と、変数にアクセスできますreq.cookies
。これには、キーが Cookie キーであり、値が Cookie 値である JSON オブジェクトが含まれています。これには名前付きのキーが含まれconnect.sid
、その値は署名されたセッション識別子になります。
すべてのリクエストでセッション Cookie の存在をチェックし、その値をコンソールに出力するルートを設定する方法の例を次に示します。
app.get("/*", function(req, res, next) {
if(typeof req.cookies['connect.sid'] !== 'undefined') {
console.log(req.cookies['connect.sid']);
}
next(); // Call the next middleware
});
また、構成セクションの後にルーター ( app.use(app.router)
) が含まれていることを確認する必要があります。cookieParser
session
Express.js/Connect が内部に格納するデータの例を以下に示します。
{
"lastAccess": 1343846924959,
"cookie": {
"originalMaxAge": 172800000,
"expires": "2012-08-03T18:48:45.144Z",
"httpOnly": true,
"path": "/"
},
"user": {
"name":"waylon",
"status":"pro"
}
}
user
フィールドはカスタムです。それ以外はすべてセッション管理の一部です。
例は Express 2.5 のものです。