• Модуль: main
  • Путь к файлу: ~/bitrix/modules/main/classes/general/main.php
  • Класс: CAllMain
  • Вызов: CAllMain::GetSpreadCookieUrls
public function GetSpreadCookieUrls()
{
	$res = array();
	if(COption::GetOptionString("main", "ALLOW_SPREAD_COOKIE", "Y")=="Y")
	{
		$response = MainContext::getCurrent()->getResponse();
		$request = MainContext::getCurrent()->getRequest();

		$application = MainApplication::getInstance();
		$localStorage = $application->getLocalSession('spreadCookies');
		$cookies = $localStorage->getData();

		foreach($cookies as $cookie)
		{
			if($cookie instanceof MainWebCookie)
			{
				$response->addCookie($cookie, false);
			}
		}
		$localStorage->clear();

		$cookies = $response->getCookies();

		if(!empty($cookies))
		{
			$params = "";
			foreach($cookies as $cookie)
			{
				if($cookie->getSpread() & MainWebCookie::SPREAD_SITES)
				{
					$params .= $cookie->getName().chr(1).
						$cookie->getValue().chr(1).
						$cookie->getExpires().chr(1).
						$cookie->getPath().chr(1).
						chr(1). //domain is empty
						$cookie->getSecure().chr(1).
						$cookie->getHttpOnly().chr(2);
				}
			}
			$salt = $_SERVER["REMOTE_ADDR"] . "|" . @filemtime($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/classes/general/version.php") . "|" . $application->getLicense()->getKey();
			$params = "s=".urlencode(base64_encode($params))."&k=".urlencode(md5($params.$salt));

			$arrDomain = array();
			$arrDomain[] = $request->getHttpHost();

			$rs = CSite::GetList('', '', array("ACTIVE" => "Y"));
			while($ar = $rs->Fetch())
			{
				$arD = explode("n", str_replace("r", "n", $ar["DOMAINS"]));
				if(is_array($arD))
					foreach($arD as $d)
						if(trim($d) <> '')
							$arrDomain[] = $d;
			}

			if(!empty($arrDomain))
			{
				$arUniqDomains = array();
				$arrDomain = array_unique($arrDomain);
				$arrDomain2 = array_unique($arrDomain);
				foreach($arrDomain as $domain1)
				{
					$bGood = true;
					foreach($arrDomain2 as $domain2)
					{
						if(mb_strlen($domain1) > mb_strlen($domain2) && mb_substr($domain1, -(mb_strlen($domain2) + 1)) == ".".$domain2)
						{
							$bGood = false;
							break;
						}
					}
					if($bGood)
						$arUniqDomains[] = $domain1;
				}

				$protocol = ($request->isHttps()? "https://" : "http://");
				$arrCurUrl = parse_url($protocol.$request->getHttpHost()."/");
				foreach($arUniqDomains as $domain)
				{
					if(trim($domain) <> '')
					{
						$url = $protocol.$domain."/bitrix/spread.php?".$params;
						$arrUrl = parse_url($url);
						if($arrUrl["host"] != $arrCurUrl["host"])
							$res[] = $url;
					}
				}
			}
		}
	}

	return $res;
}