PHP SCHOOL.biz

PHPの学習をする為のブログです。プログラム未経験の方にも理解できるよう基本的な、PHPの知識について身に付けることができるようにわかりやすい内容にしていきたいと思っています。


PHPでのSession(セッション)

セッションは、シンプルな方法で個々のユーザーのデータを格納する仕組みで、 個々のユーザーに対して一意なセッション ID を用意します。 これを用いて、複数ページにまたがるリクエストの間で状態の情報を永続化させることができます。
Cookieとは異なり、情報はユーザーのコンピュータ(ブラウザ)に保存されません。

Session(セッション)とは何?

WEBサーバーははあなたが誰であるかをわかりません。同一ユーザーのアプリケーションの起動時と終了時を判別する方法が必要です。しかし、インターネット上には1つの問題があります。Webサーバーは、ユーザーが誰であるか、どんな操作をしているかを知る方法がありません。
セッション変数を使用することにより、複数のページにわたって使用されるユーザ情報(たとえば、ユーザ名など)を格納することによって、この問題を解決します。デフォルトでは、セッション変数はユーザーがブラウザを終了するまで続きます。
セッションとは、単一のユーザーに関する情報を保持し、1つのアプリケーション内のすべてのページで使用するようにすることができる方法のことです。

PHPでのSession(セッション)のスタート

セッションは、session_start()関数で開始されます。
セッション変数はPHPのグローバル変数$ _SESSIONに設定されます。
さて、 "demo_session1.php"という新しいページを作りましょう。このページでは、新しいPHPセッションを開始し、いくつかのセッション変数を設定します。

<?php
// Start the session
session_start();
?>
<!DOCTYPE html>
<html>
<body>

<?php
// Set session variables
$_SESSION["favcolor"] = "green";
$_SESSION["favanimal"] = "cat";
echo "Session variables are set.";
?>

</body>
</html>

実行結果

ヒント:session_start()関数は、$_SESSION変数を使用する前にスタートしなければなりません。

PHPセッション変数の値を取得する

次に、「demo_session2.php」という別のページを作成します。このページでは、最初のページ("demo_session1.php")で設定したセッション情報にアクセスします。
セッション変数は新しいページに個別に渡されるのではなく、各ページの先頭にあるセッション(session_start())により取得されることに注意してください。また、すべてのセッション変数の値がグローバル$ _SESSION変数に格納されていることにも確認してみましょう。

<?php
session_start();
?>
<!DOCTYPE html>
<html>
<body>

<?php
// Echo session variables that were set on previous page
echo "Favorite color is " . $_SESSION["favcolor"] . ".<br>";
echo "Favorite animal is " . $_SESSION["favanimal"] . ".";
?>

</body>
</html>

実行結果

"demo_session2.php"では、"demo_session1.php"のファイルをincludeなどをしていないのですが、
「Favorite color is green.
Favorite animal is cat.」
と表示されました。これは、通常は、前章で学習したCookieにセッションIDを保存し、WebサーバーにあるセッションIDと比較しユーザーが同一であると判断しているということを意味しています。
同一ユーザーがアクセスするとグローバル変数の$_SESSIONでは、変数が引き継がれ"demo_session1.php"でセッションに設定した値に"demo_session2.php"でアクセスできたことを意味します。

ユーザーセッションのすべてのセッション変数値を全て表示する方法として、次のコードを実行する方法があります。

<?php
session_start();
?>
<!DOCTYPE html>
<html>
<body>

<?php
print_r($_SESSION);
?>

</body>
</html>

実行結果

セッションは、どのように機能して、どのように同一ユーザーと識別しているのか。

ほとんどのセッションでは、ユーザーのコンピュータ(ブラウザ)上で765487cf34ert8dede5a562e4f3a7e12のようなユーザーキーが設定されます。次に、セッションが別のページで開かれると、WEBサーバーでユーザーキーが捜索されます。一致した場合はそのセッションにアクセスし、一致しない場合は新しいセッションを開始します。

PHPでのSession(セッション)の値を修正する

<?php
session_start();
?>
<!DOCTYPE html>
<html>
<body>

<?php
// to change a session variable, just overwrite it 
$_SESSION["favcolor"] = "yellow";
print_r($_SESSION);
?>

</body>
</html>

実行結果
上記ソースでは、$_SESSION["favcolor"] = "yellow";で$_SESSION["favcolor"]の配列(変数)の値を上書いています。
上書くことにより$_SESSIONの値を修正することもできますし、unsetなどの関数を使用することによって$_SESSION["favcolor"]の値を空にすることもできます。

PHPでのSessin(セッション)デストロイ

すべてのグローバルセッション変数を削除してセッションを破棄するには、session_unset()およびsession_destroy()を使用します。

<?php
session_start();
?>
<!DOCTYPE html>
<html>
<body>

<?php
// remove all session variables
session_unset(); 

// destroy the session 
session_destroy(); 
?>

</body>
</html>

実行結果

上記のソースを実行すると何も表示されません。
va"demo_session1.php"などで設定したSessionの値var_dump()などで中身を見ようとしても$_SESSIONは空はずです。これはセッションの値が削除されたことを意味します。