《PHP8上級試験対策》SameSite属性付きクッキーをPHPで扱う方法

  • URLをコピーしました!

はじめに

PHP8技術者認定試験 上級の問題集では、クッキーのSameSite属性に関する出題があります。
特に setcookie() 関数での新しいオプション指定方法(配列形式)は、バージョンアップで追加されたポイントなので、試験対策としてしっかり押さえておきましょう。

キーワード: setcookie() / SameSite / Strict / Lax / None / headers_list() / PHP7.3以降

目次

コード例

<?php
declare(strict_types=1); 
error_reporting(-1);

setcookie(
    'SameSite', 
    'value',
    ['samesite' => 'Strict', 'expires' => time() + 15552000] 
);

echo "<pre>";
var_dump(headers_list());

SameSite属性の種類と違い

SameSite には3つの指定方法があり、それぞれクッキーが送信される条件が異なります。

属性説明典型的な用途
Strict完全に同一サイトからのリクエストでのみ送信される。他サイトからのリンクやフォーム送信時には送られない。CSRF対策を最優先にしたい場合
Lax通常のクロスサイトリクエストでは送信されないが、GETリンク遷移やトップレベルナビゲーション時には送信される。多くのサイトのデフォルト。利便性とセキュリティのバランス
None制限なし。クロスサイトでも送信される。ただし、Secure属性(HTTPSのみ送信)必須外部サービス連携(CDN、OAuth、外部ログインなど)

解説

配列形式でオプション指定(PHP7.3以降)

  • samesite キーで SameSite 属性を設定可能
  • 'Strict', 'Lax', 'None' を指定できる

expires の指定

  • time() + 15552000 で約180日後まで有効

ブラウザに送られるHTTPレスポンスヘッダー

実際には以下のようなヘッダーが送信されます:

Set-Cookie: SameSite=value; expires=...; Max-Age=15552000; path=/; samesite=Strict

headers_list() で確認できる

  • headers_list() は、送信予定のレスポンスヘッダーを確認できる関数です。
  • デバッグや挙動確認に便利。

まとめ

  • SameSite属性は Strict / Lax / None の3種類
  • setcookie() の配列形式オプション(PHP7.3以降)で samesite を指定できる
  • クッキー送信条件を適切に設定することで、セキュリティ(CSRF対策)利便性 を両立可能

👉 試験では「SameSite属性の違いを理解しているか」が狙われます。

この記事が気に入ったら
いいねしてね!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次