作成日:2018-01-05, 更新日:2018-01-05
基本
・セッションの有効期限とは別に有効期限を持たせる(セッションの有効期限のみだと、時間切れが原因なのかどうかが分からない)
・ログイン中かチェックするときは、処理を分岐させたいときもある。
・「auth.php」のカスタマイズは避けたい
ログイン中かチェック
・有効期限のときは、時間切れのエラーページへリダイレクト
・有効期限と関係なしの場合は、ログインページへリダイレクト
・リダイレクト無しで、単純にチェックのみしたいときもある。
叩き台
・セッションの有効期限は長めに設定しておく
・「〇〇\classes\util\auth.php」を作成
・「\Auth::login()」は「\Util_Auth::login()」的な感じで使う。
<?php class Util_Auth { // セッションのキー名 const KEY_LOGIN_LIMIT = 'loginLimit'; const KEY_LAST_ACCESS = 'lastAccess'; // ログイン有効期限(秒):セッションの有効期限より短くしておく const LOGIN_LIMIT_SEC = 3600; /** auth::login() **/ public static function login($username='', $password='') { if (\Auth::login($username, $password)) { \Session::Set(self::KEY_LOGIN_LIMIT, self::LOGIN_LIMIT_SEC); \Session::Set(self::KEY_LAST_ACCESS, time()); return true; } else { return false; } } /** auth::check() **/ public static function check($isRedirect=true) { $result = false; if ( \Auth::Check() ) { $loginLimit = \Session::Get(self::KEY_LOGIN_LIMIT, 0); $lastAccess = \Session::Get(self::KEY_LAST_ACCESS, 0); // 有効期限のチェック if ( 0 < $loginLimit ) { if ( time()-$loginLimit < $lastAccess ) { $result = true; echo 'suc login'; } else { // 有効期限ぎれ echo 'err expired-loginLimit'; } } else { // 念のためにログアウト:ココに入るコトは無いと思う。 echo 'err expired-session: ' . self::KEY_LOGIN_LIMIT; self::logout(); } } else { // ログアウトされている echo 'err logout'; } if ($isRedirect && !$result) { // ログインページ or エラーページなどにリダイレクト echo ' - redirect'; } return $result; } /** auth::logout() **/ public static function logout() { \Session::delete(self::KEY_LOGIN_LIMIT); \Session::delete(self::KEY_LAST_ACCESS); return \Auth::logout(); } }