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>
- 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>
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関数でログアウト状態を表示する欄を作る必要がある。