作成日: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
ログインしていない人はログインページに飛ばすサンプル
// ログインページのパス指定
$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');」が必要。放置していても大丈夫だろうけど、余計なものは削除しておくのが無難