トップ 差分 一覧 ソース 検索 ヘルプ PDF RSS ログイン

セッション_PHP

セッション管理

PHPでは(というよりWebアプリケーション全般では)、すべての処理が「ページ」の概念に縛られています。ログインページから次のユーザメニュー画面に移る、などの場合に基本的には情報は引き継がれません。これはセキュリティ上でも意味のあることなのですが、ログインしたからにはログインしたユーザの情報を持っておきたい、というときもあります。

恒久的に、というわけではありませんが、変数(配列)を保持することができる仕組みとして「セッション(SESSION)」があります。これは、Webページが切り替わった場合でも明示的にセッションを破棄する、としない限り、変数名と変数内容を保持することができる仕組みです。内部的にはメモリかファイル・データベースにセッション情報を持たせています。ただし、この「内部」のことは意識する必要はありません。

php.iniでセッションを有効にするのを忘れないでください。これができていて初めてセッションが有効になります。

セッションによるカウンタ

まず簡単な例を示します。

<?php
session_start();
if(!isset($_SESSION['count'])) {
    $_SESSION['count'] = 1;
} else {
    $_SESSION['count']++;
}

if($_SESSION['count'] > 10) {
    unset($_SESSION['count']);
    session_destroy();
}

$cou = $_SESSION['count'];

print("<html>\n");
print("<body>\n");
print("session cou = $cou<br>\n");
print("</body>\n");
print("</html>\n");
?>

セッションを使用する場合、その使用ページで「session_start();」を呼んでセッション使用を許可してあげる必要があります。対極なのが「session_destroy();」です。これはセッションを終了させる(破棄する)ときに呼びます。「session_destroy();」を呼ぶことで、php.iniで指定したテンポラリディレクトリから使用しているセッションファイルが削除されます。

「$_SESSION['count']」は、セッション変数のうち、「count」という名称のもの、ということになります。

if(!isset($_SESSION['count'])) {
    $_SESSION['count'] = 1;
} else {
    $_SESSION['count']++;
}

にて、セッションのcountが存在していない場合は1を入れ、存在している場合はその値を+1します。

if($_SESSION['count'] > 10) {
    unset($_SESSION['count']);
    session_destroy();
}

にて、もしカウントが10より大きい場合は「unset($_SESSION['count']);」でセッション変数であるcountをクリアし、「session_destroy();」でセッションファイル自身を削除しています。

$cou = $_SESSION['count'];

は、ほんとに普通の変数にアクセスしている感じですね。値を取り出しています。逆に「$_SESSION['count'] = 5;」のように値を入れることもできます。

このPHPファイルを再読込すると、再読込のたびに「session cou = 1」「session cou = 2」「session cou = 3」のようにカウントアップしていきます。10を超えるとクリアされ、再度1からカウントアップされます。

これができれば、ログインしたユーザ情報をセッションに保持しておき、システムの画面推移を分岐する、というのもできるようになるのが分かるかと思います。

セッション情報はPHPが動いている(つまりはサーバ側の)ローカルファイルとなりますので、クライアントからは見ることができません。「システム」を開発するとなると、このセッションという概念は切っても切り離せない仕組みです。が、仕組みさえわかれば簡単なもので、ようは「変数を一時的に保持するかどうか」というその1点につきるかと思います。

もちろん、セッションは1つだけでなくユニークな名前を付けることで複数保持することが可能です。また、配列・オブジェクトも保持可能です。しかし、セッションはあくまでも一時変数(ファイル)ですのであまり多く使わずに必要最小限に留め、不要なら変数を「unset($_SESSION['xxx'])」で破棄するようにしましょう。

Future's Laboratory 技術格納庫 2004-2013 Yutaka Yoshisaka.