質問: ### 自動セッションログアウトについてご質問です 管理画面にて、一定の操作等が行われなかった際、 自動的にログアウトさせる方法を教えていただきたいです。 現在、 ログイン画面 ログイン後のページ2〜3ページ作成 はしているのですが、 一定の操作を行わなかった際、ログアウトになりません。 色々調べてはいますが、 php初心者で関数に関する意味がいまいち理解に苦しんでおります。 ログイン画面もしくはログイン後のページに 「一定の操作が行わなかった場合」の php分岐を記載しないと自動ログアウトは実行されないのでしょうか? よろしくお願いいたします。
回答: phpの一番最初に ``` ini_set( 'session.gc_maxlifetime', 60 ); // 秒(デフォルト:1440) ``` と設定したらセッションがデストロイされるまでの時間が変更できますので、これで対応してください。 p.s. セッションのログアウトについて 実際に組み込むならこんな感じ? ``` function __construct(){ session_start(); // セッションのライフタイム変更 ini_set( 'session.gc_maxlifetime', 60 ); // 秒(デフォルト:1440) // セッションが存在していない(タイムアウトもしくはログアウトされている) if(!isset($_SESSION['LOGIN_INFO'])) { // ここにログイン処理を書く(ログイン画面に遷移させる) // セッションが存在している場合はセッションのライフタイムを更新 } else { unset($_SESSION['LOGIN_INFO']); $_SESSION['LOGIN_INFO'] = true; } } // ここからはこのページの処理 ``` __constructはページ読み込み時に自動的に読み込まれるメソッドです session_start()はセッションを起動するもので ini_set( 'session.gc_maxlifetime', 60 ); でセッションの持続時間を変更出来るので一定時間ページ遷移されない場合はセッションがなくなってしまいます。 isset関数は中身がnull以外ならtrueが返ってきます。 unset関数は対象の変数の中身をnullにします。 要は何をやってるのか、なんですが ログインしたときに$_SESSION['LOGIN_INFO'] = trueを宣言しておけば ログイン証明のセッションが発行されるので、 それがあるかないかを判定して再度ログイン要求をかけるか判定させようとしています。 また、セッションの持続時間も変更してあるので、セッションが切れたらもちろんログイン証明がなくなるので再度ログイン要求させます。 一定時間操作が無ければ、ということだったので、別のページに遷移した際にログイン証明セッションを再発行してあげれば同様の動きになると思います。