補足
[補足資料]
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'){}