Добавляем следующие обработчики в 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


Как известно в версии 17.5.10 главного модуля 1С-Битрикс появились нативные обработчики ajax-запросов у компонентов и модулей. В чем же проблема?

В данной статье я буду обсуждать только ajax-запросы к компонентам, так как проблема именно с ними, а именно, вызов метода компонента происходит статически, и мы не получаем параметров вызова компонента $arParams. Понятно, что информацию можно передавать в параметрах запроса, но что если параметров очень много или в них содержатся какие-либо секретные данные?

В этой статье я попробовал ответить на этот вопрос и придумать решение.

Если Bitrix не дает нам $arParams, получим его самостоятельно.

Исходный код из примеров ниже на GitHub…

Pavel Khoroshkov

See more about me and my projects on https://pgood.space

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store