/** Get day context singleton instance. * @return self */ public static function getInstance() { if (!self::$instance) { $instance = new self(); $varName = self::getVarName(); $session =& $_SESSION[$varName]; $expire = strtotime('today 23:59'); if (!(is_array($session) && is_int($session['ID']) && $session['EXPIRE'] === $expire)) { $session = array('ID' => null, 'EXPIRE' => $expire, 'UNIQUE' => array()); //global $APPLICATION; $cookie = $APPLICATION->get_cookie($varname); if ($cookie = $_COOKIE[$varName]) { try { $cookie = Json::decode($cookie); } catch (ArgumentException $e) { } } // check if cookie is valid if (is_array($cookie) && is_array($cookie['UNIQUE']) && $cookie['EXPIRE'] === $expire && ($id = $cookie['ID']) !== null && is_int($id) && ($id === self::EMPTY_CONTEXT_ID || Internals\ContextTable::getByPrimary($id)->fetch())) { $session['ID'] = $id; $session['UNIQUE'] = $cookie['UNIQUE']; } } $instance->id = $session['ID']; self::$session =& $session; self::$instance = $instance; } return self::$instance; }
/** Get day context singleton instance. * @return self */ public static function getInstance() { if (!self::$instance) { $instance = new self(); $varName = self::getVarName(); $session =& $_SESSION[$varName]; $expire = strtotime('today 23:59'); if (!(is_array($session) && is_int($session['ID']) && $session['EXPIRE'] === $expire)) { $session = array('ID' => null, 'EXPIRE' => $expire, 'UNIQUE' => array()); //global $APPLICATION; $cookie = $APPLICATION->get_cookie($varname); if ($cookie = $_COOKIE[$varName]) { try { $cookie = Json::decode($cookie); } catch (ArgumentException $e) { } } // validate cookie if (is_array($cookie) && is_array($cookie['UNIQUE']) && $cookie['EXPIRE'] === $expire && ($id = $cookie['ID']) !== null && is_int($id) && ($id === self::EMPTY_CONTEXT_ID || Internals\ContextTable::getByPrimary($id)->fetch())) { // 1. valid cookie $session['ID'] = $id; $session['UNIQUE'] = $cookie['UNIQUE']; } else { // 2. invalid cookie Asset::getInstance()->addString(' <script type="text/javascript"> BX.ajax.post( "/bitrix/tools/conversion/ajax_counter.php", { SITE_ID: BX.message("SITE_ID"), sessid: BX.message("bitrix_sessid"), HTTP_REFERER: "' . \CUtil::JSEscape($_SERVER['HTTP_REFERER']) . '" }, function () {} ); </script> '); } } $instance->id = $session['ID']; self::$session =& $session; self::$instance = $instance; } return self::$instance; }