Я все таки использовал мой вариант и дошел до такого кода, который я нашел в компоненте catalog.product.subscribe
[CODE]global $USER;
if ($USER->IsAuthorized())
{
// на всякий случай если очистка в логине и логауте не сработала
if ($_SESSION['SUBSCRIBE_USER'] <> $USER->GetId())
{
// очищаем подписки в сессии
unset($_SESSION['SUBSCRIBE_PRODUCT']);
// инициализируем юзера для подписок
$_SESSION['SUBSCRIBE_USER'] = $USER->GetId();
}
// Если сессия не потеряна берем информацию оттуда
if (array_key_exists($_REQUEST["ELEMENT_ID"], $_SESSION['SUBSCRIBE_PRODUCT']['LIST_PRODUCT_ID']))
{
$subscribed = 'Y';
} else {
$subscribed = 'N';
}
if ($subscribed == 'N')
{
// Если сессия потеряна или товар не найден то берем информацию из базы
$filter = array(
'USER_ID' => $USER->GetID(),
'ITEM_ID' => $_REQUEST["ELEMENT_ID"],
'=SITE_ID' => SITE_ID,
array(
'LOGIC' => 'OR',
array('=DATE_TO' => false),
array('>DATE_TO' => date($DB->dateFormatToPHP(\CLang::getDateFormat('FULL')), time()))
)
);
$queryObject = Bitrix\Catalog\SubscribeTable::getList(array('select' => array('ITEM_ID'), 'filter' => $filter));
$listRealItemId = array();
$subscribeManager = new Bitrix\Catalog\Product\SubscribeManager;
while ($subscribe = $queryObject->fetch())
{
$subscribeManager->setSessionOfSibscribedProducts($subscribe['ITEM_ID']);
$listRealItemId[] = $subscribe['ITEM_ID'];
}
if (in_array($_REQUEST["ELEMENT_ID"], $listRealItemId))
{
$subscribed = 'Y';
}
else
{
$subscribed = 'N';
}
}
} else {
// Не авторизован значит не подписан
$subscribed = 'N';
}
[/CODE]И еще в логине логине и разлогине сделал так чтобы очищалась сессия и в логине инициализировался специальный параметр SUBSCRIBE_USER, который служит для случая когда пользователь разлогинится и залогинится с другим идшником, чтобы товары старого пользователя очищались..