今からスタート! PHP

第7回 セッションの開始と終了

この記事を読むのに必要な時間:およそ 3 分

セッションの終了

つながっている状態をやめることを,セッションを終了するといいます。これには,設定によっていくつかの方法に分かれています。

Webブラウザを閉じたとき

デフォルトの設定でセッションを開始したときは,Webブラウザを閉じるまで同じセッション(ID)が有効です。ちょっと面倒ですが,リスト2を実行した後にWebブラウザを閉じ,もう一度開きなおして再度リスト2を実行すると,前回とは異なるIDが表示されるはずです。

設定した有効期限を過ぎたとき

セッションを開始する前に,あらかじめ有効期限を設定しておくと,それを過ぎてからアクセスがあっても,自動的にセッションが終了したと判断し,新たなセッションIDが設定されます。

セッションに有効期限を設定するのはsession_set_cookie_params()関数です。これを実行してからの秒数単位で指定しますので,1時間有効にするなら60×60(=3600)秒間となります。この関数はsession_start()よりも前に実行しておかなくてはなりません。

リスト4 セッション有効期限の設定

session_set_cookie_params( 60 * 60 );  // 1時間有効なセッション
session_start();                       // セッション開始

強制的に終了するとき

PHPプログラムでセッションIDを削除すると,強制的にセッションが終了されます。終了する前に,必ずそれまで使用していたデータを削除しておくようにしましょう。

リスト5 セッション強制終了

session_destroy();                     // 関連データの廃棄
setCookie( 'PHPSESSID' );              // 通常はこれで削除できる
setCookie( 'PHPSESSID', '', 0, '/' );  // 上記でクッキーを削除できないとき
'PHPSESSID'は設定により異なる場合がある

変数の利用

セッションでは,$_SESSION[名前]という変数を利用することができます。この変数は,同じ名前でもセッションごとに値が異なります。ですから,ユーザのアクセスに応じて処理を変えることもできます。変数を削除するときはunset( $_SESSION[名前] )とします。なお,$_SESSIONに関係する変数などの情報はクッキーではないため,特にプログラミングしない限りWebブラウザに送信されることはありません。これらの情報はサーバ内に保存されます。

リスト6「増やす」⁠減らす」をクリックすると,カウンタの値が増減するPHPプログラムです。図4のように複数のWebブラウザを開いてみると,カウンタの値をそれぞれ独立して増減させることができます。

リスト6 カウンタの値をボタンで増減させる

<?php
  session_start();
  if ( empty( $_SESSION[ 'count' ] ) )  $_SESSION[ 'count' ] = 0;
  if ( isset( $_POST[ 'inc' ] ) )  $_SESSION[ 'count' ]++;    // 増やす
  if ( isset( $_POST[ 'dec' ] ) )  $_SESSION[ 'count' ]--;    // 減らす
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
                      "http://www.w3.org/TR/html4/strict.dtd">
<html>
  <head>
    <title>セッションの開始と終了</title>
  </head>
  <body>
    <h4>セッションの開始と終了</h4>
<?php
    echo 'カウンタ : ' . $_SESSION[ 'count' ];    // カウンタの値
?>
    <form method="post" action="<?php echo $_SERVER[ 'PHP_SELF' ]; ?>"><div>
      <input type="submit" name="inc" value="増やす">
      <input type="submit" name="dec" value="減らす">
    </div></form>
  </body>
</html>

図4 リスト6の実行結果(ブラウザごとに値が異なっている)

図4 リスト6の実行結果(ブラウザごとに値が異なっている)

上記の3つのリストを実行する前に,まずキャッシュのデータやクッキーをいったん削除しましょう。それからWebブラウザを再起動しないと,修正の結果がうまく反映されないことがあります。こうしたことにも注意して,PHPプログラムの開発を進めていってください。

著者プロフィール

沖林正紀(おきばやしまさのり)

SE/プログラマを経て,WebアプリケーションやXMLなどについて雑誌記事や書籍の執筆活動を始める。大手メーカで製品資料の作成や,セミナーの講師を担当したこともある。現在は,取材記事や製品レビューなどに執筆活動の幅を広げる一方,プログラミング教材の開発も手がけている。

著書