/** * @param string $id - session id, must be valid hash * @return string */ public static function read($id) { if (!self::isConnected() || !self::isValidId($id)) { return ""; } $sid = self::getPrefix(); if (!self::$isReadOnly) { $lockTimeout = 55; //TODO: add setting $lockWait = 59000000; //micro seconds = 60 seconds TODO: add setting $waitStep = 100; while (!self::$connection->add($sid . $id . ".lock", 1, 0, $lockTimeout)) { usleep($waitStep); $lockWait -= $waitStep; if ($lockWait < 0) { CSecuritySession::triggerFatalError('Unable to get session lock within 60 seconds.'); } if ($waitStep < 1000000) { $waitStep *= 2; } } } self::$sessionId = $id; $res = self::$connection->get($sid . $id); if ($res === false) { $res = ""; } return $res; }
/** * @param string $id - session id, must be valid hash * @return string */ public static function read($id) { if (!self::isValidId($id)) { return ""; } if (!self::$isReadOnly && !SessionTable::lock($id, 60)) { CSecuritySession::triggerFatalError('Unable to get session lock within 60 seconds.'); } self::$sessionId = $id; $sessionRow = SessionTable::getRow(array('select' => array('SESSION_DATA'), 'filter' => array('=SESSION_ID' => $id))); if ($sessionRow && isset($sessionRow['SESSION_DATA'])) { return $sessionRow['SESSION_DATA']; } return ''; }
/** * @param string $id - session id, must be valid hash * @return string */ public static function read($id) { if (!self::isValidId($id)) { return ""; } if (!self::$isReadOnly && !CSecurityDB::Lock($id, 60)) { CSecuritySession::triggerFatalError('Unable to get session lock within 60 seconds.'); } $rs = CSecurityDB::Query("\n\t\t\tselect SESSION_DATA\n\t\t\tfrom b_sec_session\n\t\t\twhere SESSION_ID = '" . $id . "'\n\t\t", "Module: security; Class: CSecuritySession; Function: read; File: " . __FILE__ . "; Line: " . __LINE__); $ar = CSecurityDB::Fetch($rs); if ($ar) { $res = base64_decode($ar["SESSION_DATA"]); return $res; } return ""; }
/** * @param string $id - session id, must be valid hash * @return string */ public static function read($id) { if (!self::isConnected() || !self::isValidId($id)) { return ""; } $sid = self::getPrefix(); if (!self::$isReadOnly) { $lockTimeout = 55; //TODO: add setting $lockWait = 59000000; //micro seconds = 60 seconds TODO: add setting $waitStep = 100; if (defined('BX_SECURITY_SESSION_MEMCACHE_EXLOCK') && BX_SECURITY_SESSION_MEMCACHE_EXLOCK) { $lock = Bitrix\Main\Context::getCurrent()->getRequest()->getRequestedPage(); } else { $lock = 1; } while (!self::$connection->add($sid . $id . ".lock", $lock, 0, $lockTimeout)) { usleep($waitStep); $lockWait -= $waitStep; if ($lockWait < 0) { $errorText = 'Unable to get session lock within 60 seconds.'; if ($lock !== 1) { $lockedUri = self::$connection->get($sid . $id . ".lock"); if ($lockedUri && $lockedUri != 1) { $errorText .= sprintf(' Locked by "%s".', self::$connection->get($sid . $id . ".lock")); } } CSecuritySession::triggerFatalError($errorText); } if ($waitStep < 1000000) { $waitStep *= 2; } } } self::$sessionId = $id; self::$isSessionReady = true; $res = self::$connection->get($sid . $id); if ($res === false) { $res = ""; } return $res; }