Modx $_SESSION

Здравствуйте.

Непонятная для меня проблема c $_SESSION в MODx revo 2.2.14 — 2.3.1

Вот не большой сниппет, который получает рандомно отсритрованные id нужных ресурсов, но во избежание повтора id использую сессию, следующим образом:
<?php
$output = $modx->runSnippet('pdoResources',array(
   'includeTVs' => 'place_banner',
   'parents' => '3',
   'depth' => '2',
   'limit' => '0',
   'sortby' => 'RAND()',
   'returnIds' => '1',
   'where' => '{"template:=":"5", "place_banner:!=":""}'
));
$outputArray = explode(',', $output);
echo("<script>console.log('IN SES: " . $_SESSION['current_adimg'] . "');</script>");
echo("<script>console.log('IN ARR: " . $outputArray[0] . "');</script>");
if ( empty( $_SESSION['current_adimg'] ) ) {
	$_SESSION['current_adimg'] = $outputArray[0];
	echo("<script>console.log('ON EMPTY SES: " . $_SESSION['current_adimg'] . "');</script>");
	$modx->setPlaceholder($toPlaceholder,  $_SESSION['current_adimg']);
	return;
}
else if ($_SESSION['current_adimg'] == $outputArray[0]) {
	$_SESSION['current_adimg'] = $outputArray[1];
	echo("<script>console.log('ON REP SES: " . $_SESSION['current_adimg'] . "');</script>");
	$modx->setPlaceholder($toPlaceholder,  $_SESSION['current_adimg']);
	return;
}
else {
	$_SESSION['current_adimg'] = $outputArray[0];
	echo("<script>console.log('JUST SES: " . $_SESSION['current_adimg'] . "');</script>");
	$modx->setPlaceholder($toPlaceholder,  $_SESSION['current_adimg']);
	return;
}
Так вот, проблема состоит в том, что после сохранения в сессию одного значение на входе у сессии уже совсем другое, как будто снипет сработал невидимо второй раз.
Ivan
01 августа 2014, 02:14
modx.pro
3 042
0

Комментарии: 12

    Сергей Шлоков
    01 августа 2014, 15:21
    0
    В 2.3.1 писали, что должен быть
    return "";
    А зачем в каждой секции if стоит return? Достаточно одного в самом конце сниппета.
      Сергей Шлоков
      01 августа 2014, 16:14
      0
      Еще спрошу на всякий случай, а ты свой сниппет вызываешь кэшированным? Чтоб все эти вычисления работали он должен быть некэшируемым.
        Ivan
        02 августа 2014, 12:31
        0
        Вызываю сниппет не кешируемым, echo убрать не помогает никак, ну а return так поставил т.к. уже в голову не приходит от чего такое поведение $_SESSION, хотя и его перестановка в конец, как написал Сергей не помогла.
          Ivan
          02 августа 2014, 12:34
          0
          Ради теста, можете сделать то же самое просто подставив массив чисел и делать suffle, по алгоритму random without repeating(для чего я и использую сессию) обрабатывать его в итоге увидите, что в сессию на входе поступает не то на чем скрипт остановился(и остановился ли?).
            Ivan
            02 августа 2014, 12:36
            0
            причем с $_COOCKIE точно такая же ситуация…
              Василий Наумкин
              02 августа 2014, 15:31
              +1
              Так вот, проблема состоит в том, что после сохранения в сессию одного значение на входе у сессии уже совсем другое, как будто снипет сработал невидимо второй раз.
              Я так думаю, что сниппет действительно срабатывает 2 раза — это самое логичное объяснение.
                Ivan
                02 августа 2014, 17:43
                0
                Да ето действительно так, проверил — на тестовом сайте все ок. Как в других шаблонах сайта. Т.е только в шаблоне галавной сайте, где етот сниппет и нужен такое происходит.

                Определил что проблему создает getImageList — сниппет вывода значений MIGX. Если убрать его вызов все работает как надо. Можно как то выводить MIGX tv с помощю pdoPage\Resources например, вместо getImageList?
                  Ivan
                  02 августа 2014, 18:07
                  0
                  UPD:

                  Дальнейшее исследование определило что в чанке-шаблоне для getImageList ету проблему создает pthumb.

                  Что именно в самом pthumb является причиной установить не удалось.
                Ivan
                02 августа 2014, 18:15
                0
                Спасибо всем за ответы.

                Отдельное спасибо Василию — Вы великий человек раз находите время на ответы рядовым пользователям:)
                Пришлось избавится от pThumb, который в начале казалось не при чем.
                  Василий Наумкин
                  02 августа 2014, 20:53
                  0
                  Да не за что.

                  Интересно, что такого внутри pThumb, что он так может помешать.
                    Ivan
                    03 августа 2014, 00:35
                    0
                    для меня там довольно сложный код, да и дебажить ето заняло бы прилично времени у меня, но в любом случае из-за него некэшируемый сниппет с сессией или куки выполняется 2 раза подряд.

                    Заменил на phpThumbOn — все работает отлично, странно конечно что его выпилили из официального репозитория — вроде как лучший в своем роде.
                  Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
                  12