Server IP : 80.87.202.40 / Your IP : 216.73.216.169 Web Server : Apache System : Linux rospirotorg.ru 5.14.0-539.el9.x86_64 #1 SMP PREEMPT_DYNAMIC Thu Dec 5 22:26:13 UTC 2024 x86_64 User : bitrix ( 600) PHP Version : 8.2.27 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : ON Directory : /home/bitrix/ext_www/rospirotorg.ru/bitrix/modules/main/lib/web/ |
Upload File : |
<?php namespace Bitrix\Main\Web; use Bitrix\Main\Config; use Bitrix\Main\SiteDomainTable; class Cookie extends Http\Cookie { public const SPREAD_SITES = 1; public const SPREAD_DOMAIN = 2; protected $spread; protected $originalName; /** * Cookie constructor. * @param string $name The cooke name * @param string|null $value The cooke value * @param int $expires Timestamp * @param bool $addPrefix Name prefix, usually BITRIX_SM_ */ public function __construct($name, $value, $expires = null, $addPrefix = true) { $this->name = ($addPrefix ? static::generateCookieName($name) : $name); $this->originalName = $name; $this->value = $value; $this->expires = ($expires === null ? time() + 31104000 : $expires); //60*60*24*30*12 $this->spread = static::SPREAD_DOMAIN | static::SPREAD_SITES; $this->setDefaultsFromConfig(); } protected static function generateCookieName($name) { static $cookiePrefix = null; if ($cookiePrefix === null) { $cookiePrefix = Config\Option::get("main", "cookie_name", "BITRIX_SM") . "_"; $cookiePrefix = static::normalizeName($cookiePrefix); } if (!str_starts_with($name, $cookiePrefix)) { $name = $cookiePrefix . $name; } return $name; } protected function setDefaultsFromConfig() { $cookiesSettings = Config\Configuration::getValue('cookies'); $this->secure = ($cookiesSettings['secure'] ?? false); $this->httpOnly = ($cookiesSettings['http_only'] ?? true); if (isset($cookiesSettings['samesite'])) { $this->sameSite = $cookiesSettings['samesite']; } } public function getDomain(): ?string { if ($this->domain === null) { $this->domain = static::getCookieDomain(); } return $this->domain; } public function getOriginalName(): string { return $this->originalName; } public function setSpread($spread) { $this->spread = $spread; return $this; } public function getSpread() { return $this->spread; } /** * Returns the domain from the sites settings to use with cookies. * * @return string * @throws \Bitrix\Main\Db\SqlQueryException * @throws \Bitrix\Main\SystemException */ public static function getCookieDomain() { static $domain = null; if ($domain !== null) { return $domain; } $request = \Bitrix\Main\Context::getCurrent()->getRequest(); $httpHost = $request->getHttpHost(); $recordset = SiteDomainTable::getList([ 'order' => ['DOMAIN_LENGTH' => 'ASC'], 'cache' => ['ttl' => 86400], ]); while ($record = $recordset->fetch()) { if (strcasecmp(mb_substr('.' . $httpHost, -(mb_strlen($record['DOMAIN']) + 1)), "." . $record['DOMAIN']) == 0) { $domain = $record['DOMAIN']; return $domain; } } $domain = ''; return $domain; } /** * Normalizes a name for a cookie. * @param string $name * @return string */ public static function normalizeName(string $name): string { // cookie name cannot contain "=", ",", ";", " ", "\t", "\r", "\n", "\013", or "\014" return preg_replace("/[=,; \\t\\r\\n\\013\\014]/", '', $name); } }