/** * Only allow one session per user * * If the current user's session has been taken over by a newer * session then we will destroy their session automattically and * they will have to login again to continue. * * @action init */ function pcl_prevent_concurrent_logins() { if (!pcl_user_has_concurrent_sessions()) { return; } $user_id = get_current_user_id(); /** * Filter to allow certain users to have concurrent sessions when necessary * * @since 0.1.1 * * @param bool $prevent * @param int $user_id ID of the current user * * @return bool */ if (false === (bool) apply_filters('pcl_prevent_concurrent_logins', true, $user_id)) { return; } $newest = max(wp_list_pluck(wp_get_all_sessions(), 'login')); $session = pcl_get_current_session(); if ($session['login'] === $newest) { wp_destroy_other_sessions(); /** * Fires after a user's non-current sessions are destroyed * * @since 0.3.0 * * @param int $user_id ID of the affected user */ do_action('pcl_destroy_other_sessions', $user_id); } else { wp_destroy_current_session(); /** * Fires after a user's current session is destroyed * * @since 0.3.0 * * @param int $user_id ID of the affected user */ do_action('pcl_destroy_current_session', $user_id); } }
/** * Log the current user out. * * @since 2.5.0 */ function wp_logout() { wp_destroy_current_session(); wp_clear_auth_cookie(); /** * Fires after a user is logged-out. * * @since 1.5.0 */ do_action('wp_logout'); }
function pc_logout() { global $pc_users; if (isset($_SESSION['pc_user_id'])) { unset($_SESSION['pc_user_id']); } if (isset($GLOBALS['pc_user_id'])) { unset($GLOBALS['pc_user_id']); } setcookie('pc_user', '', time() - 3600 * 25, '/'); $wp_user_id = pc_user_logged('wp_user_id'); if ($wp_user_id !== false) { // wp user sync - unlog if WP logged is the one synced if ($pc_users->wp_user_sync) { $current_user = wp_get_current_user(); if ($current_user && $wp_user_id == $current_user->ID) { wp_destroy_current_session(); setcookie(AUTH_COOKIE, ' ', time() - YEAR_IN_SECONDS, ADMIN_COOKIE_PATH, COOKIE_DOMAIN); setcookie(SECURE_AUTH_COOKIE, ' ', time() - YEAR_IN_SECONDS, ADMIN_COOKIE_PATH, COOKIE_DOMAIN); setcookie(AUTH_COOKIE, ' ', time() - YEAR_IN_SECONDS, PLUGINS_COOKIE_PATH, COOKIE_DOMAIN); setcookie(SECURE_AUTH_COOKIE, ' ', time() - YEAR_IN_SECONDS, PLUGINS_COOKIE_PATH, COOKIE_DOMAIN); setcookie(LOGGED_IN_COOKIE, ' ', time() - YEAR_IN_SECONDS, COOKIEPATH, COOKIE_DOMAIN); setcookie(LOGGED_IN_COOKIE, ' ', time() - YEAR_IN_SECONDS, SITECOOKIEPATH, COOKIE_DOMAIN); // Old cookies setcookie(AUTH_COOKIE, ' ', time() - YEAR_IN_SECONDS, COOKIEPATH, COOKIE_DOMAIN); setcookie(AUTH_COOKIE, ' ', time() - YEAR_IN_SECONDS, SITECOOKIEPATH, COOKIE_DOMAIN); setcookie(SECURE_AUTH_COOKIE, ' ', time() - YEAR_IN_SECONDS, COOKIEPATH, COOKIE_DOMAIN); setcookie(SECURE_AUTH_COOKIE, ' ', time() - YEAR_IN_SECONDS, SITECOOKIEPATH, COOKIE_DOMAIN); // Even older cookies setcookie(USER_COOKIE, ' ', time() - YEAR_IN_SECONDS, COOKIEPATH, COOKIE_DOMAIN); setcookie(PASS_COOKIE, ' ', time() - YEAR_IN_SECONDS, COOKIEPATH, COOKIE_DOMAIN); setcookie(USER_COOKIE, ' ', time() - YEAR_IN_SECONDS, SITECOOKIEPATH, COOKIE_DOMAIN); setcookie(PASS_COOKIE, ' ', time() - YEAR_IN_SECONDS, SITECOOKIEPATH, COOKIE_DOMAIN); //wp_clear_auth_cookie(); // don't use the function to avoid interferences with do_action( 'clear_auth_cookie' ); } } // PC-ACTION - user is logged out - passes user id do_action('pc_user_logout', $GLOBALS['PC_VER_LOGGED_USER']); unset($GLOBALS['PC_VER_LOGGED_USER']); } return true; }
function oxd_openid_logout_validate() { if (isset($_REQUEST['option']) and strpos($_REQUEST['option'], 'allLogout') !== false && !isset($_REQUEST['state'])) { echo '<script> var delete_cookie = function(name) { document.cookie = name + \'=;expires=Thu, 01 Jan 1970 00:00:01 GMT;\'; }; delete_cookie(\'user_oxd_access_token\'); delete_cookie(\'user_oxd_id_token\'); delete_cookie(\'session_states\'); delete_cookie(\'states\'); </script>'; wp_destroy_current_session(); wp_clear_auth_cookie(); wp_logout(); } }