UI設計したり、ウェブシステムを開発したりします。 

SQL見るだけクエリ#272 PHP セッションを経過時間で管理する方法(クラスの作成)

記入日:2023-10-07 編集日:2023-10-07

PHP セッションを経過時間で管理する方法(クラスの作成)について解説をしてみようと思います。

この記事を読むと(約5分)
PHP セッションを経過時間で管理する方法(クラスの作成)についてイメージできます。

PHP セッションを経過時間で管理するクラス

指定の条件に基づいてセッションを管理するPHPクラスの例です。このクラスは、セッションがない場合にはセッションを作成し、セッションが存在する場合には時間を比較し、指定の秒数以内であれば継続し、それ以上であればログアウト処理を行います。

class SessionManager {

  private $maxIdleTime;

  public function __construct($maxIdleTime = 600) {
    session_start();
    $this->maxIdleTime = $maxIdleTime;
    $this->checkSession();
  }

  private function checkSession() {
    if (!isset($_SESSION['last_activity'])) {
      $_SESSION['last_activity'] = time();
    } else {
      $idleTime = time() - $_SESSION['last_activity'];
      if ($idleTime > $this->maxIdleTime) {
        $this->logout();
      } else {
        $_SESSION['last_activity'] = time();
      }
    }
  }

  private function logout() {
    session_unset();
    session_destroy();
    // ここにログアウト時の追加処理を追加できます。
    header("Location: login.php"); // ログインページなどへリダイレクトする場合
    exit();
  }

}

// セッションマネージャを初期化($maxIdleTimeは秒単位)
$sessionManager = new SessionManager(600);

// 以下、ページの残りのコードを記述します。

このクラスは、SessionManagerインスタンスを作成することでセッションの管理を開始します。$maxIdleTime パラメータは、セッションがアイドル状態でどれだけの秒数まで許容するかを指定します(デフォルトは600秒)。セッションが $maxIdleTime を超える時間アイドル状態になると、logout メソッドが呼び出されてログアウト処理が行われます。

このクラスを利用する場合は、ファイルの先頭に require_once 'SessionManager.php'; のようにして読み込むと使えるようになります。また、セッションの管理はスクリプトの先頭で行う必要があります。

コードの詳しい解説

1. SessionManager クラスの定義:

  • private $maxIdleTime;: アイドル状態の最大許容時間(秒単位)を保持するプロパティです。デフォルトでは600秒(10分)が設定されています。
  • public function __construct($maxIdleTime = 600): クラスのコンストラクタです。セッションを開始し、最大アイドル時間を設定します。
  • private function checkSession(): セッションをチェックし、必要に応じてログアウト処理を行うプライベートメソッドです。
  • private function logout(): ログアウト処理を行うプライベートメソッドです。セッションを破棄し、必要な追加のログアウト処理を行うことができます。

2. checkSession() メソッドの解説:

  • if (!isset($_SESSION['last_activity'])) { ... }: セッション内に 'last_activity' がセットされていない場合、現在の時間をセットします。
  • else { ... }: 'last_activity' がセットされている場合、アイドル時間を計算し、最大アイドル時間を超えた場合はログアウト処理を呼び出します。それ以外の場合は 'last_activity' を更新します。

3. logout() メソッドの解説:

  • session_unset();: セッション変数を全て削除します。
  • session_destroy();: セッションを破棄します。
  • header("Location: login.php");: ログアウト後にリダイレクトさせるためのヘッダー情報を送信します。これにより、例えばログインページにリダイレクトします。

4. 使用例:

  • new SessionManager(600);: セッションマネージャを初期化します。最大アイドル時間は600秒(10分)ですが、オプションで変更可能です。

これにより、SessionManager を利用することで、セッションのアイドル時間を管理し、一定時間以上アイドル状態が続いた場合には自動的にログアウトする処理が行われます。

SQLの使いどころ

サイトに大量の情報を掲載することは、ユーザーにとってとても便利なことです。しかし、情報が多すぎると、目的の情報を見つけるのが困難になります。そのため、SQLを使用することで、情報を効率的に管理することができます。

SQLを使用することで、データベース内の情報を検索したり、フィルタリングしたりすることができます。これにより、ユーザーは目的の情報をスムーズかつ簡単に見つけることができます。

また、SQLを使用することで、データを集計したり、統合したりすることもできます。これにより、ユーザーはさまざまな視点から情報を分析することができます。つまり、サイトに多くの情報を掲載することが重要である一方で、その情報を効率的かつ簡単に管理することが求められる場合には、SQLが不可欠であるといえます。

KK

機械工学を専攻。工業デザイナーとして、国内及び海外の自動車・搬送ラインの設計などに従事した後、2003年にウェブシステム会社を設立。UI設計やウェブシステムの開発、DX化のディレクションなどを行っています。