ラボ > FuelPHP:auth関連、セッション

FuelPHPのログインに有効期限を追加

セッション切れでログアウトじゃなくて・・・時間内のログアウトを実装したい

作成日:2017-11-16, 更新日:2019-03-19

基本

色々と方法はあるんだろうけど・・・ログインチェック時にログイン有効期限のチェックを追加するのが良さげ

$loginLimit = ログイン有効期限(秒);
if( !\Auth::check() ) {
  // ログインしていない
}
else {
  if ( 0 < $loginLimit ) {
    if ( (int) \Session::key('updated') < time()-$loginLimit ) {
      // ログイン中だけど有効期限が切れたので強制的にログアウト
      \Auth::logout();
    }
  }
  else {
    // ログイン中
  }
}

注意

セッションの有効期限内でログイン有効期限を設定

▼セッションの有効期限絡みの設定を確認
・expire_on_close、expiration_time

参考
FuelPHPのセッションを使うときの下準備と豆知識

ログインしていない人はログインページに飛ばすサンプル

// ログインページのパス指定
$pathLogin = \Uri::create('/login');

$errMes = '';
if( !\Auth::check() ) {
  $errMes = 'ログインしてください';
}
else {
  // 有効期限切れ(秒)
  $loginLimit = 60 * 60 * 1; // 3600秒:60sec * 60min * 1hour
  if ( 0 < $loginLimit ) {
    if ( (int) \Session::key('updated') < time()-$loginLimit ) {
      $errMes = '自動ログアウトしました';
      \Auth::logout();
    }
  }
}

if ( $errMes != '' ) {
  \Session::set_flash('errMess', $errMes);
  \Session::set('httpReffrer', \Uri::current());
  \Response::redirect($pathLogin, 'refresh', 200);
}

\Session::delete('httpReffrer');
  • 「$pathLogin = \Uri::create('/login');」は、ログインしていない人のリダイレクト先。
    エラーページに飛ばしてもいいけど、ログインページにエラーメッセージってのが個人的に好きなのでこういう感じ。
  • そのエラーメッセージは「\Session::set_flash('errMess', $errMes);」でセッションに持たしておく。「\Session::set()」じゃなくて「\Session::set_flash()」にしたのは、リダイレクト先で表示したら勝手に消えてくれるから。リダイレクト先でリダイレクトされたりするとダメだけど・・・。
  • ログインページで「$errMess = \Session::get_flash('errMess', '');」とすればエラー内容が取得できる
  • 「\Session::set('httpReffrer', \Uri::current());」は、ログインしていいない人がログイン必須ページにアクセスしてきたとき、ログイン後に元のページに戻りたいとき用。
    ログイン成功時には「\Session::delete('httpReffrer');」が必要。放置していても大丈夫だろうけど、余計なものは削除しておくのが無難

関連項目

FuelPHPのセッションを使うときの下準備と豆知識