64 public static function read($id)
66 if(!self::isConnected() || !self::isValidId($id))
71 if (!self::$isReadOnly)
77 if (defined(
'BX_SECURITY_SESSION_MEMCACHE_EXLOCK') && BX_SECURITY_SESSION_MEMCACHE_EXLOCK)
78 $lock = Bitrix\Main\Context::getCurrent()->getRequest()->getRequestedPage();
82 while(!self::$connection->add($sid.$id.
".lock", $lock, 0, $lockTimeout))
84 if(self::$connection->increment($sid.$id.
".lock", 1) === 1)
86 self::$connection->replace($sid.$id.
".lock", $lock, 0, $lockTimeout);
90 $lockWait -= $waitStep;
93 $errorText =
'Unable to get session lock within 60 seconds.';
96 $lockedUri = self::$connection->get($sid.$id.
".lock");
97 if ($lockedUri && $lockedUri != 1)
98 $errorText .= sprintf(
' Locked by "%s".', $lockedUri);
104 if($waitStep < 1000000)
109 self::$sessionId = $id;
110 self::$isSessionReady =
true;
111 $res = self::$connection->get($sid.$id);
114 if (!self::$hasFailedRead)
117 self::$hasFailedRead =
true;
248 if (!extension_loaded(
'memcache'))
251 $exception = new \ErrorException(
"memcache extention not loaded.", 0, E_USER_ERROR, __FILE__, __LINE__);
256 if (!self::isStorageEnabled())
259 $exception = new \ErrorException(
"BX_SECURITY_SESSION_MEMCACHE_HOST constant is not defined.", 0, E_USER_ERROR, __FILE__, __LINE__);
265 $port = defined(
"BX_SECURITY_SESSION_MEMCACHE_PORT")? intval(BX_SECURITY_SESSION_MEMCACHE_PORT): 11211;
266 self::$connection =
new Memcache;
267 $result = self::$connection->pconnect(BX_SECURITY_SESSION_MEMCACHE_HOST, $port);
270 $error = error_get_last();
281 $exceptionHandler =
$application->getExceptionHandler();
282 $exceptionHandler->writeToLog($exception);