作成日: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();
}
}