Битрикс: кроссавторизация на поддоменах на одном ядре
Aug 4, 2021
Добавляем следующие обработчики в init.php и незабываем заменить имя домена на свое
<?php/**
* ставим авторизованную сессионную куку для родительского
* домена, чтобы все поддомены ее видели
*/
AddEventHandler(‘main’,’OnAfterUserAuthorize’,function($arUser){
$m = null;
if(preg_match(‘/^.+(\.mysite\.com)$/’,$_SERVER[‘SERVER_NAME’],$m))
setcookie(session_name(),session_id(),0,’/’,$m[1]);
});/**
* удаляем сессионную куку, если есть вторая от родительского домена
*/
AddEventHandler(‘main’,’OnBeforeProlog’,function(){
if(!$GLOBALS[‘USER’]::IsAuthorized()
&& ($arHeaders = getallheaders())
&& ($arCookies = explode(‘;’,$arHeaders[‘Cookie’]))
){
$m = null;
foreach($arCookies as $str)
if(preg_match(‘/^\s*’.session_name().’=(.*)$/’,$str,$m)
&& $m[1] != session_id()
){
unset($_COOKIE[session_name()]);
setcookie(session_name(),null,-1,’/’);
header(‘Refresh:0’);
die;
}
}
});
Исходники на GitHub Gists:
https://gist.github.com/pgooood/3cce10f2fde1edcbe02f95ccbf1fc7c4