- 更新日: 2017年02月27日
- 公開日: 2015年12月08日
ゼロから始めるPHP講座Vol.47 セッションとは
ゼロから始めるPHP講座セッションとは
セッションとは
Webサイトにアクセスしているユーザが複数ページにまたがるアクセスをした際に、同じユーザであることを判断する仕組みです。
SNSを代表としたIDとパスワードを入力してログインをするサイトではログイン後に様々なページへアクセスできますが、「ログイン済みの同じユーザ」がアクセスしていることを判断するとき、多くの場合セッションを利用しています。
セッションは「セッションID」という値を発行し、このセッションIDをサーバとユーザのPCへ保存します。ユーザが複数ページへアクセスした際に保存されているセッションIDをサーバへ送信することで、サーバは「同じユーザ」か判断します。
なお「ユーザのPCへセッションIDの保存」というのは、先ほど学んだCookieを利用しています。
セッションの仕組みを図で示すと次のようになります。
ユーザが同サイト上の別ページへアクセスした際は保存されているセッションIDをサーバへ送信し、サーバ側でセッションID確認によりユーザ認証をします。
お手本にある通り、セッションを利用したプログラムを書いてみましょう。
<pre>
<?php
session_start();
print 'セッション名: ' . session_name() . "\n";
print 'セッションID: ' . session_id() . "\n";
if (isset($_SESSION['count']) === TRUE) {
$_SESSION['count']++;
} else {
$_SESSION['count'] = 1;
}
print $_SESSION['count'] . '回目の訪問です' . "\n";
?>
</pre>
動作サンプル:session.php
初回訪問
作成したページへ訪問する度に、訪問回数が1回ずつプラスされます。
セッションIDの保存はCookieを利用しているため、セッションによるユーザ認証はブラウザごとに行っています。このため別なブラウザからアクセスすると、訪問数は1からスタートになります。
またセッションにより複数ページで「同じユーザ」と判断していることを確認したい場合、session.phpをコピーしてsession_2.phpを作成し、アクセスしてみましょう。session_2.php
2つのページにて訪問回数が共通でカウントされ、同じセッションIDが表示されます。
セッション開始
セッション名はPHPの設定により決められており一定です。
これに対しCookieの値となるセッションIDはsession_start関数が実行されるとユニークな値が自動で発行されます。
セッション名とセッションIDはsession_name関数とsession_id関数を実行すると取得できます。
print 'セッション名: ' . session_name() . "\n";
print 'セッションID: ' . session_id() . "\n";
前述の通りセッション名は「PHPSESSID」で固定ですが、セッションIDは英数字の文字列になります。
今回はセッション理解のためセッション名とセッションIDを取得し表示しましたが、この2つを直接扱うことはなく、通常意識する必要はありません。
なおセッションの有効期限はデフォルトではブラウザを終了するまでとなっています。
一旦ブラウザを終了してから再度session.phpへアクセスすると、セッションIDに別な値が割り振られ、訪問数が1となるのが分かります。
またこれまで説明した内容は新しいセッションを開始の場合ですが、既にセッションIDが発行されてCookieに保存されている場合、session_start関数はユーザのCookieから送信されてきたセッションIDの確認を行い、セッションを再開します。
セッション変数
セッション開始をすると、セッション変数を利用することができます。
セッション変数に値を保存しておくと、別なページへ移動しても値を利用することができます。
if (isset($_SESSION['count']) === TRUE) {
$_SESSION['count']++;
} else {
$_SESSION['count'] = 1;
}
print $_SESSION['count'] . '回目の訪問です' . "\n";
セッション変数はスーパーグローバル変数$_SESSIONで管理します。
セッション変数名(サンプルではcount)キー値
設定した値はセッションIDと紐付いており、session_start関数で送られてきたセッションIDとサーバのセッションIDが一致した場合、他のスーパーグローバル変数と同様に連想配列の形で自動的に定義されます。
なお変数名(キー)と値は複数設定することが可能です。
NEXTLESSONセッションの使用例セッションの使用例
PREVLESSONCookieの使用例Cookieの使用例
- この記事を書いた人
- CodeCampus編集部