久しぶりにやったらハマったのでメモ。PHPでsetcookieを使う場合、「Warning: Cannot modify header information – headers already sent by …」という警告が出る場合があります。
setcookie関数より前に、echoやhtml文などで出力するとでる警告みたいです。
PHPマニュアル setcookieより
https://www.php.net/manual/ja/function.setcookie.php
setcookie() は、その他のヘッダ情報と共に 送信するクッキーを定義します。 ほかのヘッダ情報と同様に、 クッキーは、スクリプトによる他のあらゆる出力よりも前に 送信される必要があります(これはHTTPプロトコルの制約です)。 や
タグはもちろん 空白も含め、あらゆる出力よりも前にこの関数をコールするようにしなければなりません。
セッションを削除したりしたい場合、下記のように回避すると良いかと思います。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
<?php // セッションのスタート session_start(); // 出力用 $output = ''; if (isset($_SESSION["EMAIL"])) { $output = 'Logout'; } else { $output = 'Timeout'; } //セッション変数のクリア $_SESSION = array(); //セッションクッキーも削除 if (ini_get("session.use_cookies")) { $params = session_get_cookie_params(); setcookie(session_name(), '', time() - 42000, $params["path"], $params["domain"], $params["secure"], $params["httponly"] ); } //セッションクリア session_destroy(); ?> <!DOCTYPE html> <html lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <title>Login</title> </head> <body> <?php echo $output ?> </body> </html> |
コメントを残す