return array(CONTROLLER_STATUS_REDIRECT, fn_url()); } $stored_user_login = fn_restore_post_data('user_login'); if (!empty($stored_user_login)) { Registry::get('view')->assign('stored_user_login', $stored_user_login); } if (AREA != 'A') { fn_add_breadcrumb(__('sign_in')); } Registry::get('view')->assign('view_mode', 'simple'); } elseif ($mode == 'password_change' && AREA == 'A') { if (defined('AJAX_REQUEST') && empty($auth)) { exit; } if (empty($auth['user_id'])) { return array(CONTROLLER_STATUS_REDIRECT, fn_url()); } $profile_id = 0; $user_data = fn_get_user_info($auth['user_id'], true, $profile_id); Registry::get('view')->assign('user_data', $user_data); Registry::get('view')->assign('view_mode', 'simple'); } elseif ($mode == 'change_login') { $auth = $_SESSION['auth']; if (!empty($auth['user_id'])) { fn_log_user_logout($auth); } unset($_SESSION['cart']['user_data']); fn_login_user(); fn_delete_session_data(AREA . '_user_id', AREA . '_password'); return array(CONTROLLER_STATUS_OK, 'checkout.checkout'); }
/** * Expire session, move it to stored sessions and log out user * * @param string $sess_id session ID * @param array $session session data */ public static function expire($sess_id, $session) { $sess_data = Session::decode($session['data']); db_query('REPLACE INTO ?:stored_sessions ?e', array('session_id' => $sess_id, 'data' => self::encode(array('settings' => $sess_data['settings'])), 'expiry' => $session['expiry'])); if (!empty($sess_data['auth'])) { fn_log_user_logout($sess_data['auth'], $session['expiry']); } }
/** * @param array $auth */ function fn_user_logout($auth) { // Regenerate session_id for security reasons fn_save_cart_content($_SESSION['cart'], $auth['user_id']); Session::regenerateId(); fn_init_user(); $auth = $_SESSION['auth']; if (!empty($auth['user_id'])) { fn_log_user_logout($auth); } unset($_SESSION['auth']); fn_clear_cart($_SESSION['cart'], false, true); fn_delete_session_data(AREA . '_user_id', AREA . '_password'); unset($_SESSION['product_notifications']); fn_login_user(); // need to fill $_SESSION['auth'] array for anonymous user }
/** * @param array $auth */ function fn_user_logout($auth) { // Regenerate session_id for security reasons fn_save_cart_content(Tygh::$app['session']['cart'], $auth['user_id']); Tygh::$app['session']->regenerateID(); fn_init_user(); $auth = Tygh::$app['session']['auth']; if (!empty($auth['user_id'])) { fn_log_user_logout($auth); } unset(Tygh::$app['session']['auth']); fn_clear_cart(Tygh::$app['session']['cart'], false, true); fn_delete_session_data(AREA . '_user_id', AREA . '_password'); unset(Tygh::$app['session']['product_notifications']); fn_login_user(); // need to fill Tygh::$app['session']['auth'] array for anonymous user /** * Allows to perform any actions after user logout. * * @param array $auth Auth data from session */ fn_set_hook('user_logout_after', $auth); }
/** * Garbage collector - move expired sessions to session archive * * @param int $max_lifetime session lifetime * * @return boolean always true */ public function gc($max_lifetime) { // Move expired sessions to sessions storage db_query('REPLACE INTO ?:stored_sessions SELECT * FROM ?:sessions WHERE expiry < ?i', TIME); $sessions = db_get_array('SELECT * FROM ?:sessions WHERE expiry < ?i', TIME); if ($sessions) { foreach ($sessions as $entry) { fn_log_user_logout($entry, Session::decode($entry['data'])); } // delete old sessions db_query('DELETE FROM ?:sessions WHERE expiry < ?i', TIME); } // Cleanup sessions storage db_query('DELETE FROM ?:stored_sessions WHERE expiry < ?i', TIME - SESSIONS_STORAGE_ALIVE_TIME); return true; }
static function gc($max_lifetime) { // Move expired sessions to sessions storage db_query('REPLACE INTO ?:stored_sessions SELECT * FROM ?:sessions WHERE expiry < ?i', TIME); $sessions = db_get_array('SELECT * FROM ?:sessions WHERE expiry < ?i', TIME); if ($sessions) { foreach ($sessions as $entry) { fn_log_user_logout($entry, self::decode($entry['data'])); } // delete old sessions db_query("DELETE FROM ?:sessions WHERE expiry < ?i", TIME); } // Delete custom files (garbage) from unlogged customers $files = fn_get_dir_contents(DIR_CUSTOM_FILES . 'sess_data', false, true); if (!empty($files)) { foreach ($files as $file) { $fdate = fileatime(DIR_CUSTOM_FILES . 'sess_data/' . $file); if ($fdate < TIME - SESSIONS_STORAGE_ALIVE_TIME) { fn_rm(DIR_CUSTOM_FILES . 'sess_data/' . $file); } } } // Cleanup sessions storage db_query('DELETE FROM ?:stored_sessions WHERE expiry < ?i', TIME - SESSIONS_STORAGE_ALIVE_TIME); return true; }