Next.js の session まわりめも

セッション周りの理解がガバすぎて、ここを読んでよくわからなかったのでめも。違ってたらぜひ教えてほしい

https://nextjs.org/docs/app/guides/authentication

session とは

毎回忘れるけど、"ページをまたいで受け渡されるデータ" が session data で、 DB とか Cookie とかはそれをどう保存するかという話

余談: session ID って危なくないんだっけ

session ID ってブラウザの dev console からいじれるから、 session ID をテキトーに変えたら他の人の情報とれるんじゃね? と思って なんで大丈夫なんだっけというのを調べた

(1) session IDs are cryptographically secure

cryptographically secure → 予測されにくい

(2) HttpOnly x 短い expiresAt

  • HttpOnly = JS で操作できない = 人手でぽちぽち変えるしかない
  • これに、 expiresAt が組み合わさると、制限時間内に brute force することはほぼ無理

なので、予測されにくい session ID と、 cookie の HttpOnly と、 expiresAt の設定によって守られてる

stateless session とは

個人的に stateless っていう名前が超紛らわしいと思ったんだけど、 stateless っていうのはただ「session data を DB に保存してないですよ」っていうだけだった

server-side/client-side cookies

cookie ってブラウザに保存するやつだから全部 client-side では..? と思って謎だった 結論これはあってて、 server/client は「誰が」 cookie をセットするかの違いだった

  • client-side: JS から document.cookie APIcookie を set する
  • server-side: レスポンスに Set-cookie ヘッダーを入れる → ブラウザに cookie を保存 → 次のリクエストで cookie を入れる