フリーPHPスクリプト配布サイト。
セッション管理の機能を使用すれば、Cookieよりも手軽に大量のデータを扱うことができます。
セッションはCookieとは異なり、データはサーバー側に保存されます。そして訪問者を区別するためのIDのみCookieに保存されます。次回のアクセスではCookieに保存されたIDををもとに訪問者を識別し、サーバー側に保存したデータを読み出します。
以下で、「はじめての訪問と2回目以降の訪問で、表示内容が変化する」仕組みを例に、PHPでセッションを扱う具体的な流れを紹介します。
はじめてページにアクセスしたときはCookieにデータがない(訪問者のコンピュータにデータが書き込まれていない)、つまり訪問者を区別するためのIDがないので、PHPが新規にIDを発行します。(以下の図では、「2713」というIDが発行されたものとしています。)そしてそのIDをもとにサーバー上にファイルを作成します。保存したい値は、このファイル内に書きこまれます。
表示データをブラウザに送る際、IDのみをCookieに保存します。
次回、同じページにアクセスしたときはCookieにIDがあります。このIDをもとにPHPがファイルを探します。ファイルがあればその内容を読み込み、PHPで扱えるようにします。(その際、必要ならさらに別の値を書きこむこともできます。)
このような仕組みでデータを保持する仕組みをセッションと呼びます。
IDを発行したり、IDをもとにサーバー上にファイルを作成したり、IDをもとにファイルを探したり、ファイルの内容を読み込んだり…という処理はPHPが自動で行ってくれるので、PHPプログラムでは細かいことを考えなくてもセッションを扱えます。ですが、どういう仕組みなのかは把握しておいた方がいいでしょう。
なお、IDは実際はもっと長く複雑な値になります。また、実際は拡張子が txt
のファイルに保存されるわけではありません。ファイルではなく、データベースやメモリに保存されることもあります。上の説明は、セッションの概要を説明するために少し単純化しています。
PHPからセッションを読み書きするには $_SESSION
にアクセスします。$_SESSION
は $_POST
や $_GET
と同様、PHPが自動的に値をセットしてくれる連想配列です。ただし、プログラム内であらかじめ session_start
関数を呼び出しておかないと値はセットされません。
session_start
関数を呼ぶと、PHPがIDを発行したり、そのIDをもとにファイルを作成したり、ファイルの内容を変数に格納してくれたり…という処理が行われます。これらは裏で自動的に行われるので、細かいことを考えなくてもセッションを扱えます。
以下はセッションを使用したプログラムの例です。
<?php
session_start();
if (isset($_SESSION["count"])) {
$_SESSION["count"]++;
} else {
$_SESSION["count"] = 1;
}
echo $_SESSION["count"] . "回目のアクセスです。";
?>
Cookieの時と同様、訪問回数によって表示されるメッセージが変わります。このようにPHPでは、Cookieやサーバー側のデータを意識することなく、簡単にセッションデータを扱うことができます。
なお、session_start
関数は画面にデータを表示する前に実行する必要があります。(初回アクセス時、訪問者を区別するためのIDをCookieに保存するため。)表示後に実行しても、セッションは開始されません。ですので、HTMLタグ込みで出力する場合は
<?php
session_start();
if (isset($_SESSION["count"])) {
$_SESSION["count"]++;
} else {
$_SESSION["count"] = 1;
}
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>サンプル</title>
</head>
<body>
<?php
echo $_SESSION["count"] . "回目のアクセスです。";
?>
</body>
</html>
このようにする必要があります。session_start
関数はHTMLタグを出力する前に実行していますが、アクセス数の表示はHTMLの文法どおり body
タグ内で行っています。