それでは、あなたがこのようなcookie-session
何かを構成したと仮定しましょう
req.session.user_id = 123;
あなたのブラウザの開発ツールで見れば、あなたはよ2つのクッキーセットを参照してください:
express:sess = eyJ1c2VyX2lkIjoxMjN9
express:sess.sig = 01I_Rx2gACezZI1tdl2-NvxPq6w
クッキーexpress:sess
はbase64でエンコードされます。デコードすると{"user_id":123}
となります。セッションデータがクッキー自体に格納されていることを理解することが重要です。これはセッションのIDだけではありません。
他のクッキーexpress:sess.sig
が署名です。このシグネチャは、キー(この例ではsecret
)を使用して生成され、改ざんを防止するために使用されます。誰もがexpress:sess
を変更するのは簡単ですが、対応するexpress:sess.sig
も生成できない限り、サーバーは変更されたことを認識します。
私はあなたがexpress-session
ミドルウェアを見てみることをお勧めします。それはまた、クッキーを使用しますが、セッションIDを保存するためにのみ使用します。 Cookieに格納されているデータはすべてサーバーに格納されていません。これは、他のほとんどのWebフレームワークでセッションがどのように機能するかに似ていますが、どのアプローチがあなたのニーズに最も適しているかは確かではありません。
どちらのアプローチでも、デフォルトでhttponly
に設定されたCookieを使用します。ブラウザの開発ツールでこれを確認することができます。つまり、HTTPリクエストに含まれていますが、クライアント側のJavaScript経由ではアクセスできません。これは、悪質なコードがCookieを盗むのをより困難にするために設計されたセキュリティ対策です。あなたは使ってcookie-session
でこのセキュリティ機能を無効にすることができます
app.use(cookieSession({
httpOnly: false,
keys: ['secret']
}));
あなたはその後、document.cookie
を使用して、これらのクッキーにアクセスすることができます。
これはセキュリティ上の措置であり、オフにすることはお勧めしません。これがあなたのアプリケーションで真の関心事であるかどうかを判断することは不可能です。
実際にクッキーから値を解析するのか、それともその存在を確認するのかは、あなたの質問からはっきりしません。解析する必要がある場合は、関連するCookie値をbase64でデコードし、JSONでデコードする必要があります。
クッキーを維持するために採用する可能性のあるさまざまな方法があります。httponly
あなたがこの情報を使って何をやろうとしているかについての詳細がわからなければ、具体的にするのは難しいです。 Expressビュー(テンプレートレンダリング)を使用している場合は、テンプレート内のすべての作業を行うことができます。あなたがSPAの地域にいるなら、おそらくAJAXリクエストを使って関連情報を収集することができます。ピンチでは、セッションクッキーを安全に保ちながら、必要な情報を提供するために別のクッキーを使用することさえできます。
彼は、セッションデータをデシパー/サイファーし、その内容をクライアントデバイスに保存する 'cookie-session'パッケージについて話しています – num8er