○セッション
保持したいデータをサーバに保存し、
受け渡しするのはセッションIDのみ。
セッションIDは、クッキーに保存される。
・セッションの開始
session_start();
詳細は↓
http://php.net/manual/ja/function.session-start.php
・セッション情報の追加、呼び出し
$_SESSION['[セッション変数名]'] = ($value) ($value = ) $_SESSION['[セッション変数名]']
・セッションの破棄
session_destroy();
※ただし、メモリ上のセッションは残ってしまう。
実際にセッションを完全に削除するには、
セッション変数を空にし、セッションクッキーを削除する。
詳細は↓
http://php.net/manual/ja/function.session-destroy.php
●テストプログラム
フォームに入力した値をセッション情報に保存し、
次回フォームを開いた時にテキストボックスに元々入ってるようにする。
・form_session.php : フォームのページ --------------------------------------------------------------- <?php session_start([ 'gc_probability'=>1, 'gc_divisor'=>1, 'gc_maxlifetime'=>60 ]); ?> <!DOCTYPE html> <html><body> <form method="POST" action="session.php"> 名 前:<input type="text" name="name" value="<?=$_SESSION['name'] ?? '' ?>" /><br /> メアド:<input type="text" name="mail" value="<?=$_SESSION['mail'] ?? '' ?>" /><br /> <input type="submit" value="登録" /> </form> </body></html> ---------------------------------------------------------------
セッションの有効期限を60秒に、
ガーベジコレクタの実行確率を1/1に設定※
クッキーの時と同様に、
条件演算子は必要。
※PHP7.0.0以降で有効。
php.iniで”session.gc_***”を設定するのと同等。
php.iniのセッション設定の詳細は↓
http://php.net/manual/ja/session.configuration.php)
・session.php : POSTデータを元にセッション情報を設定する --------------------------------------------------------------- <?php session_start(); $_SESSION['name'] = $_POST['name']; $_SESSION['mail'] = $_POST['mail']; ?> <!DOCTYPE html> <html><body> セッションを保存しました。<br /> 名 前:<?=$_SESSION['name'] ?><br /> メアド:<?=$_SESSION['mail'] ?><br /> <input type="button" onclick="location.href='form_session.php'" value="戻る"> </body></html> ---------------------------------------------------------------
●実験
最初にフォーム画面を開いた時に、
“PHPSESSID”が発行され、クッキーに保存される。
(デベロッパーツールにて確認。
Google Chromeの場合は、F12で開く。)
フォーム画面で、
名前とメアドを入力して「登録」を押すと、
session.phpにて、セッション情報が保存される。
この時のリクエストヘッダを見ると、
先ほど発行された”PHPSESSID”を渡していることがわかる。
※”PHPSESSID”は、ブラウザを閉じるまで有効。
セッションクッキーの有効期限を
設定する方法もあるらしいが、今回は割愛。
方法については↓
https://blog.dksg.jp/2009/05/php.html
で、「戻る」を押すと、
はじめからテキストボックスに、
先ほどの入力値が入っている。
それから、有効期限の60秒以上経過してから、
ブラウザを更新すると・・・
セッション情報が削除されていない。
なぜでしょう?
session.gc_divisorの説明を見ると、
http://php.net/manual/ja/session.configuration.php#ini.session.gc-divisor
ガーベジコレクションは、
リクエスト発生時に始動するとのこと。
更新した時に、リクエスト投げてるはずだけど、
同じSESSIDだとダメなんでしょうか?
試しに60秒後、別の端末からアクセスしてみて、
その後更新(F5)。
セッション情報消えてますね。
そういうことか。
ちなみにこの時のリクエストヘッダ内のSESSIDは、
変わってませんでした。
同じSESSIDでセッションが新たに作成される。
ってことなんですかね?