セッションIDからユーザーIDを2回抽出するのではなく、他のユーザー情報を抽出するために1回だけデータベースを検索するように、セッションIDの代わりにユーザーIDを保存する方がいいのではないでしょうか。
悪意のあるユーザーが送信するIDを変更する可能性があるため、これは非常に悪い考えです。
たとえば、管理者がID 1
、およびユーザーのID 101
、そのユーザーはCookie内のIDを1
、つまり管理者権限を取得します。
同じ理由で、このデータを信頼できないため、Cookieで他の関連データを送信することは望まないでしょう(データが署名されていないため、jwtを使用して変更できない場合など)。
もちろん、ランダムなユーザーIDを生成することもできます。しかし、これらが推測不可能であると仮定しても、これには問題があります。これは、パスワードをCookieで送信する場合と基本的に同じです。 IDが一度でも漏洩すると、攻撃者は取り消すことができないため、永続的なアクセス権を取得します。一方、セッションIDはしばらくすると期限切れになるか、取り消されます。
セッションIDは頻繁に変更する必要があるため、ユーザーIDはデータベース内の定数値であり、Cookieでセッショントークンを処理するために必要な値ではありません。
@AndrolGenhaldが述べたように、データベース内のユーザーIDは、新しいユーザーで単純に増加する数になる可能性が高いため、おそらく簡単に予測できます。一方、セッションIDはエントロピーが高いため、セッションIDの値を推測することは非常に困難です。