SESSIONとCOOKIEについて

変数は特定のキーワードやファンクションを格納し、同じ場所のページ内で使いまわしできる利点がある。

この変数を別のページに使いまわす場合、formを使用して$_POSTで受け取りして、再度変数に格納しなおさなければならない。

この手順は少しばかり面倒なので今まで使っていたローカル変数ではなく、SessionやCookieといったグローバル変数を使用すれば、ページ遷移時でも情報保持したまま使用しすることができる。

ただしCookieの方は時限的、Sessionはプラウザを閉じるまでというの持続性の違いがあるので
会員制HPのログイン時や商品を選んだ状態のショッピングカート移動など用途を選ぶ必要がある。

Cookie

送信フォーム側ページ

<?php 
if(isset($_COOKIE['my_id'])){
  $myId = $_COOKIE['my_id'];
}else{
  $myId = '';
}
?>
<!DOCTYPE HTML>

---  head部分省略  ---

<body>
<h1>入力されたIDを次回アクセスまで覚える</h1>
<form action="cookie_do.php" method="post">
<dl>
  <dt>ID</dt>
  <dd><input type="text" name="my_id" id="my_id" value="<?php
print $myId; ?>"></dd>
  <dt>パスワード</dt>
  <dd><input type="password" name="password" id="password"></dd>
  <dt>IDの保存</dt>
  <dd><input type="checkbox" name="save" id="save" value="on">
  		<label for="save">IDを保存する。</label>
  </dd>
  <input type="submit" value="送信">
</dl>
</form>
</body>
  • Cookieは情報を保持し続けたいページの冒頭(DTDよりも上、1行目から)にと記述し、ページを開いたらすぐに$_COOKIE['my_id']の中に保持情報が入ってるかどうかをチェックしておく。
  • input type="checkbox" で維持したい情報があるか否かを判断するチェックボックスを作っておく。

受信側ページ

<?php 
$myId = $_POST['my_id'];
$password = $_POST['password'];
$save = $_POST['save'];

//Cookie保存の命令があったら
if($save == 'on'){
  //第3引数に現時刻より60秒×60(分)×24(時間)×14(日)=つまり2週間保存命令。
  setcookie('my_id',$myId,time() + 60*60*24*14);
  $message = 'ログイン情報を記録しました。';
}else{
  setcookie ('my_id');
  $message = '記録しませんでした。';
}
?>

---  head部分、body内一部省略  ---

<p><?php print $message;?></p>
<p><a href="cookie.php">戻る</a></p>
</body>
  • 送信フォームから送られた情報をそれぞれのローカル変数に格納しておく。
  • それらのローカル変数から保持したい情報が入ってる変数をグローバル変数Cookieに入れる。
  • 送信フォーム側でチェックボックスのID保存チェックが入っているかどうかをif文で判断。
  • setcookie(クッキー名,保持したい情報:ここではローカル変数,保持期間)でCookieに保存できる。第3引数は現時刻より60秒×60(分)×24(時間)×14(日)=つまり2週間保存命令という意味。

Session

送信フォーム側ページ

<form action="session_do.php" method="post">
<dl>
  <dd><input type="text" name="my_id" id="my_id" ></dd>
  <dt>パスワード</dt>
  <dd><input type="password" name="password" id="password"></dd>
  <input type="submit" value="送信">
</dl>
</form>

受信側ページ

<?php 
session_start();

if(isset($_POST['my_id'])){
  $_SESSION['my_id'] = $_POST['my_id'];
  }
?>

<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>受信側</title>
</head>

<body>
<h1>ログイン情報をログアウトするまで保持する。</h1>
<p><?php $_SESSION['my_id']; ?>さんの情報がまだ残っています。</p>

<p><a href="logout.php">ログアウトする。</a></p>
</body>
</html>

ログアウトページ

<?php
session_start();

session_unset();
header( 'Location: input.html' );

受信ページでログアウトを選択すると上記のページを経由して
元のページに戻る。
画面表示しない、コードのスクリプト(ログアウト)が動くだけのページなので
見た目は分からないので更に”ログアウトしました”と表示する中間ページを作るか
input.phpにif+isset関数でログアウト状態を表示する欄を作る必要がある。