用語解説

SameSite Cookieとは?HTML共有・AI生成サイトでの意味をやさしく解説

「SameSite」はCookieに付けられるセキュリティ属性で、別サイトからのリクエストにCookieを送るかどうかを制御します。AI生成HTMLをiframeに埋め込んだり外部サービス経由でプレビューしたりする場面では、このSameSite属性が原因でセッションが維持されなかったりログイン状態が壊れたりすることがあります。用語の意味と実務への影響を正確に把握しておきましょう。

ひとことで言うと

SameSiteはCookieに付与できる属性で、「同一サイトからのリクエストにのみCookieを送る」かどうかを指定します。値はStrict・Lax・Noneの3種類あり、Strictは他サイトリンクからの遷移でも一切送らない最も厳格な設定、LaxはGETリクエストのトップレベルナビゲーションのみ許可、NoneはSecure属性とセットにすることで全リクエストに送ります。

現代のブラウザはデフォルトでSameSite=Laxとして扱うため、明示的に設定していない古いCookieも自動的にLax相当になります。これにより外部サービスからiframeでコンテンツを埋め込んだ際にCookieが届かず、ログインが必要なコンテンツが未認証として表示されることがあります。

  • 相手がログインなしで開ける状態か確認する
  • PCとスマホで最低1回ずつ表示を確認する
  • 内部情報・個人情報・不要な外部送信が残っていないか見る
  • レビュー期限と修正時の差し替え方を決めておく

HTML共有で関係する場面

ギガサイト便などの静的HTML共有サービスでプレビューURLを発行すると、元のドメインとは異なるドメインでHTMLが配信されます。HTML内にCookieベースの認証やセッション管理が含まれている場合、SameSite=Strict/Laxのため共有URL経由ではCookieが送られず、ログイン状態が保たれません。これはバグではなく、クロスサイトリクエストフォージェリ(CSRF)を防ぐための正常な動作です。

Notionや社内Wikiにプレビューページをiframeで埋め込む場合、SameSite=NoneかつSecure=trueのCookieでなければiframe内では機能しません。AI生成HTMLに認証コンポーネントが含まれる場合、埋め込みで動作確認するのではなく、ダイレクトリンクを開いて確認する運用に切り替えると期待通りの挙動が得られます。

よくある誤解

「SameSiteをNoneにすれば全部解決する」と考えがちですが、SameSite=Noneを使うにはSecure属性(HTTPS必須)とセットにしなければなりません。HTTPでホストしている開発環境やローカルプレビューではSecureが付けられないため、Noneに設定してもCookieは送られません。共有先がHTTPSかどうかを先に確認してください。

SameSiteは「同一サイト」の判定に「eTLD+1」(例:example.comの部分)を使います。サブドメインが異なるだけ(app.example.comとapi.example.com)であれば同一サイトとみなされるため、SameSite=Strictでも多くの場合は問題ありません。ただしポート番号が異なる場合は別オリジンとして扱われます。

安全に使うための注意点

AI生成HTMLを社外に共有するとき、HTML内のCookieにSameSite=NoneとSecure属性が付いている場合は注意が必要です。これはクロスサイトでのCookie送信を許可する設定であり、正当な理由がなければStrict/Laxに変更してください。AIが自動生成したコードにこの設定が混入していないか、共有前にHTMLソースを検索して確認する習慣をつけましょう。

共有先のプレビューURLがHTTPSで配信されているかを確認することが基本的なセキュリティ対策です。ギガサイト便はCloudflare経由でHTTPSを自動付与するため、Secure属性が必要な設定との互換性を担保できます。HTTPのURLでプレビューを共有している場合は、SameSite=NoneのCookieが機能しない点を事前に共有相手に伝えておくと混乱を防げます。

よくある質問

SameSite属性を設定しないとブラウザはどう扱いますか?

Chrome 80以降のモダンブラウザは未設定のCookieをSameSite=Laxとして扱います。そのため明示的に指定しなくても外部サイトからのPOSTリクエストにはCookieが送られなくなっています。

プレビューURLで共有したHTMLがCookieを使う場合、レビュアーに影響はありますか?

レビュアーのブラウザには共有先ドメインのCookieが書き込まれます。SameSite=Lax/Strictであれば他サイトへは流出しませんが、レビュー終了後に共有サービスの設定でURLを無効化することでアクセスを遮断できます。

SameSite=NoneとSameSite=Strictはどちらをデフォルトに選ぶべきですか?

外部共有目的のHTMLには原則Strict(またはLax)を選んでください。Noneはクロスサイト埋め込みで必須な場合のみ使用し、必ずSecure属性と組み合わせます。AIが生成したコードに自動でNoneが付く場合は手動で変更してください。

関連記事

「用語解説」の記事をもっと見る →