Ejemplo n.º 1
0
 function Logout()
 {
     /** @global CMain $APPLICATION */
     global $APPLICATION, $DB;
     $USER_ID = $_SESSION["SESS_AUTH"]["USER_ID"];
     $arParams = array("USER_ID" => &$USER_ID);
     $APPLICATION->ResetException();
     $bOk = true;
     foreach (GetModuleEvents("main", "OnBeforeUserLogout", true) as $arEvent) {
         if (ExecuteModuleEventEx($arEvent, array(&$arParams)) === false) {
             if (!$APPLICATION->GetException()) {
                 $APPLICATION->ThrowException("Unknown logout error");
             }
             $bOk = false;
             break;
         }
     }
     if ($bOk) {
         foreach (GetModuleEvents("main", "OnUserLogout", true) as $arEvent) {
             ExecuteModuleEventEx($arEvent, array($USER_ID));
         }
         if ($_SESSION["SESS_AUTH"]["STORED_AUTH_ID"] > 0) {
             $DB->Query("DELETE FROM b_user_stored_auth WHERE ID=" . intval($_SESSION["SESS_AUTH"]["STORED_AUTH_ID"]));
         }
         $this->justAuthorized = false;
         $_SESSION["SESS_AUTH"] = array();
         unset($_SESSION["SESS_AUTH"]);
         unset($_SESSION["SESS_OPERATIONS"]);
         unset($_SESSION["MODULE_PERMISSIONS"]);
         unset($_SESSION["SESS_PWD_HASH_TESTED"]);
         //change session id for security reason after logout
         if (COption::GetOptionString("security", "session", "N") === "Y" && CModule::IncludeModule("security")) {
             CSecuritySession::UpdateSessID();
         } else {
             session_regenerate_id(true);
         }
         $multi = COption::GetOptionString("main", "auth_multisite", "N") == "Y";
         $APPLICATION->set_cookie("UIDH", "", 0, '/', false, false, $multi, false, true);
         $APPLICATION->set_cookie("UIDL", "", 0, '/', false, false, $multi, false, true);
         CHTMLPagesCache::OnUserLogout();
     }
     $arParams["SUCCESS"] = $bOk;
     foreach (GetModuleEvents("main", "OnAfterUserLogout", true) as $arEvent) {
         ExecuteModuleEventEx($arEvent, array(&$arParams));
     }
     if (COption::GetOptionString("main", "event_log_logout", "N") === "Y") {
         CEventLog::Log("SECURITY", "USER_LOGOUT", "main", $USER_ID);
     }
 }