- Модуль: 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;
}