public static function isLoggedIn()
{
// profile object exist? (this means the session/cookie checks have
// already happened in the current request and we cached the profile)
if (isset(self::$profile)) {
return true;
} elseif (\SpoonSession::exists('frontend_profile_logged_in') && \SpoonSession::get('frontend_profile_logged_in') === true) {
// get session id
$sessionId = \SpoonSession::getSessionId();
// get profile id
$profileId = (int) FrontendModel::getContainer()->get('database')->getVar('SELECT p.id
FROM profiles AS p
INNER JOIN profiles_sessions AS ps ON ps.profile_id = p.id
WHERE ps.session_id = ?', (string) $sessionId);
// valid profile id
if ($profileId !== 0) {
// update session date
FrontendModel::getContainer()->get('database')->update('profiles_sessions', array('date' => FrontendModel::getUTCDate()), 'session_id = ?', $sessionId);
// new user object
self::$profile = new FrontendProfilesProfile($profileId);
// logged in
return true;
} else {
// invalid session
\SpoonSession::set('frontend_profile_logged_in', false);
}
} elseif (CommonCookie::exists('frontend_profile_secret_key') && CommonCookie::get('frontend_profile_secret_key') != '') {
// secret
$secret = (string) CommonCookie::get('frontend_profile_secret_key');
// get profile id
$profileId = (int) FrontendModel::getContainer()->get('database')->getVar('SELECT p.id
FROM profiles AS p
INNER JOIN profiles_sessions AS ps ON ps.profile_id = p.id
WHERE ps.secret_key = ?', $secret);
// valid profile id
if ($profileId !== 0) {
// get new secret key
$profileSecret = FrontendProfilesModel::getEncryptedString(\SpoonSession::getSessionId(), FrontendProfilesModel::getRandomString());
// update session record
FrontendModel::getContainer()->get('database')->update('profiles_sessions', array('session_id' => \SpoonSession::getSessionId(), 'secret_key' => $profileSecret, 'date' => FrontendModel::getUTCDate()), 'secret_key = ?', $secret);
// set new cookie
CommonCookie::set('frontend_profile_secret_key', $profileSecret);
// set is_logged_in to true
\SpoonSession::set('frontend_profile_logged_in', true);
// update last login
FrontendProfilesModel::update($profileId, array('last_login' => FrontendModel::getUTCDate()));
// new user object
self::$profile = new FrontendProfilesProfile($profileId);
// logged in
return true;
} else {
// invalid cookie
CommonCookie::delete('frontend_profile_secret_key');
}
}
// no one is logged in
return false;
}