セッション
(ブログ記事の一覧は「こちら」)
ログイン認証やショッピングカートのような場面では、ブラウザを開いているうちは、ページが切り替わっても入力した情報がサーバー側に保持されるので、データは残り続けます。そのような仕組みをセッションと呼びます。セッションの基本的な仕組みについて学びます。
ここで学ぶこと
- クッキー、セッション
- session_start() 関数
- セッション変数($_SESSION)
「クッキー」はブラウザ側で保持するキーと値のことで、「セッション」はサーバー側に保持するキーと値のことです。
PHPはサーバー側で実行されるプログラムですので、セッションに関するプログラムを記述することで、その情報がクッキーにも保持される仕組みになっています。
- var_dump(デバッグ用の表示)
- header関数(リダイレクト)
参考:
セッション処理(PHPマニュアル)
header関数(PHPマニュアル)
例題
作成するもの
以下の流れにようになるPHPプログラムを作成します。
session_top ⇒ session_set ⇒ session_check ⇒ session_top
⇒ session_delete
順次説明していきます。
プログラム
まず、POSTでデータを送信する画面「session_top.php」を作成します。
<?php session_start(); var_dump($_SESSION); ?> <html> <head> <meta charset="UTF-8"> </head> <body> <h1>POSTでデータを送信する</h1> <form action="session_set.php" method="POST"> <p>名前:<input type="text" name="name"></p> <p>趣味:<input type="text" name="hobby"></p> <input type="submit" value="送信する"> </form> </body> </html>
次に、POSTで受信したデータをSESSIONに渡す画面「session_set.php」を作成します。
<?php session_start(); $_SESSION['name'] = $_POST['name']; $_SESSION['hobby'] = $_POST['hobby']; var_dump($_SESSION); ?> <html> <body> <h1>POSTで受信したデータをSESSIONに渡す</h1> <a href="session_check.php">確認画面へ</a> </body> </html>
SESSIONが引き続き受信できていることを確認する画面「session_check.php」を作成します。
<?php session_start(); var_dump($_SESSION); $name = $_SESSION['name']; $hobby = $_SESSION['hobby']; ?> <html> <head> <meta charset="UTF-8"> </head> <body> <h1>SESSIONが引き続き受信できていることを確認</h1> <p>あなたは<?php echo $name;?>さんです。</p> <p>あなたの趣味は<?php echo $hobby;?>です。</p> <p><a href="session_top.php">トップに戻る</a></p> <p><a href="session_delete.php">セッションデータを削除</a></p> </body> </html>
「トップに戻る」を選択したときも、セッションの情報が引き継がれることが確認できます。(session_top.php の冒頭で session_start(); を呼んでいることから)
最後に、全てのセッションを削除する画面「session_delete.php」を作成します。
<?php session_start(); // セッション変数を全て解除する $_SESSION = array(); // クッキーも削除する $session_name = session_name(); if (isset($_COOKIE[$session_name]) === TRUE) { setcookie($session_name, '', time() - 3600); } // セッションのデータを破棄 session_destroy(); var_dump($_SESSION); ?> <html> <body> <h1>全てのSESSIONを削除</h1> <a href="session_top.php">トップに戻る</a> </body> </html>
実行、確認
「session_top.php」を実行して、順次進んでください。
「session_check.php」でセッションの保持、「session_delete.php」で全てのセッションが削除されることを確認してください。
参考
全てのセッションを削除する画面「session_delete.php」から自動的にトップ画面「session_top.php」に移動させたい、ということも考えられます。(このような処理をリダイレクトと呼びます。)
その場合、PHPスクリプトの最後に以下の header関数と exit関数を追加することで実現できます。(画面は表示されなくなるため、HTML部分の記述は不要になります。)
「session_delete.php」に以下を追記することで実現できます。
<?php (省略) // 強制的に、トップに戻る header("Location: session_top.php"); exit(); ?>
課題1
「session_top.php」のテキストボックスに、セッションでセットした値が入るように修正してください。
また、「性別」(男、女)、「血液型」(A型、B型、O型、AB型)を選択する項目を追加して、さらにそれぞれの選択した値をセッションに加えて、正しく動作するように修正してください。
課題2
課題1のプログラムに対して、以下の追加の修正を行ってください。
「session_delete.php」では全てのセッションが削除されてしましたが、「名前」「趣味」「性別」「血液型」それぞれのセッションを個別に削除する機能を追加してください。
個別にセッションを削除するには、unset関数を使用します。
例えば、「名前」のセッション 'name' を削除する場合は以下のように記述します。
unset($_SESSION['name']);