示例#1
0
 /**
  * @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;
 }
示例#2
0
 /**
  * @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 '';
 }
示例#3
0
 /**
  * @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 "";
 }
示例#4
0
 /**
  * @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;
 }