補足

[補足資料]
schooの生放送でお伝えしきれなかった箇所を補足させていただきます。


① セッションの破棄について

授業でセッションの破棄について「session_destroy()」と行うと
紹介させていただきました。

この「session_destory()」だけでは完全にセッション情報を
削除するのには不十分でした。完全にセッション情報を削除するには
下記コードが必要です。

// セッション変数を全て解除する
$_SESSION = array();

// セッションを切断するにはセッションクッキーも削除する。
// Note: セッション情報だけでなくセッションを破壊する。
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();


トークンの比較について

授業中にトークンの比較を下記コードで比較を行いました。
「if($_POST['token'] != $_SESSION['token']){}」

こちらのコードでは正常にページ遷移を行った場合は正しく動作しますが、
最後のthk.phpに直接アクセスした場合、POSTデータのトークン、
SESSIONデータのトークンが共に、空となりますので、一致しプログラム上
正常と判断されてしまいました。

こちらのコードをトークン情報がセットされているかを確認し、無ければエラー
コードをトークン用の変数に代入しています。
その後にトークンの比較を行うよう修正いたしました。

// POSTデータのトークンを確認
if(isset($_POST['token'])){$post_token = $_POST['token'];}
else{$post_token = 'err123';}

// SESSIONデータのトークンを確認
if(isset($_SESSION['token'])){$session_token = $_SESSION['token'];}
else{$session_token='err456';}

// トークンデータの比較
if($post_token != $session_token || $_SERVER['REQUEST_METHOD']!='POST'){}