Как стандартизировать сессию? [РЕШЕНО]

Друзья, добрый день!

Устанавливаю скрипт комментариев.
Все социальные сети подключены (показывает «Успешно»).
Но после этого ничего не происходит. Аватар остается в виде неизвестного
человека (как до авторизации) и не появляется кнопка «Отправить» (в демо версии появляется).

В поддержке мне ответили:
«Проблема в специфике движка. Дело в том что, скрипт не видит параметры
сессии (в headset.php, который подключается в начале шаблона, идет
проверка параметров авторизации, эти параметры записываются в сессию),
вроде как модекс перехватывает управление сессий или что-то типа того, с
модексом я знаком поверхностно. Нужно либо подружить скрипт с модексом,
либо в настройках отключить управление сессиями, тогда сессии будут
управляться стандартно. Попробуйте это сделать.»

Пересмотрела всю конфигурацию в Evo, не нашла такого параметра. Похоже руками нужно дописывать. Подскажите, пожалуйста, где и что.

Сам файл headset.php:

<?php
if (!session_start()) session_start();
if (isset($_SESSION['user_id'])) {
	setcookie('user_id', $_SESSION['user_id'], time()+60*60*24*30, '/');
	if (isset($_SESSION['utc'])) {
		setcookie('utc', $_SESSION['utc'], time() + 60 * 60 * 24 * 30, '/');
	}
}
if(!isset($_SESSION['logged_admin_comments']) && $_SESSION['user_id'] == 1){
	unset($_SESSION['user_id']);
	unset($_SESSION['utc']);
	setcookie('user_id', '', time()-3600, '/');
	setcookie('utc', '', time()-3600, '/');
}
?>


Вызываю с помощью сниппета:

<?php
	include_once(MODX_BASE_PATH . 'commenton/headset.php');
?>


Спасибо!

34 комментария

avatar
Может попробовать тоже самое, но в виде плагина на событие onWebPagePrerender?
avatar
Спасибо за отклик)
Создала плагин
<?php
        include_once(MODX_BASE_PATH . 'commenton/headset.php');
?>

Событие отметила
— не работает…
avatar


Попробуйте еще так, вдруг заработает. А если серьезно, то чтобы совместить два принципиально разных скрипта, нужно хоть как-то понимать, как они работают, а не надеяться на доброе сообщество.
avatar
Хорошо, если можете, порекомендуйте, пожалуйста, где почитать про сессии и как они работают.
Я перед тем, как задать вопрос перелазила по поисковику. В лучшем случае — про чистку пишут.
Комментарий отредактирован 2017-09-14 13:45:29 пользователем mari412
avatar
Документации по PHP полным полно php.ru/manual/book.session.html
Но в любом случае разбираться нужно со скриптом комментариев и переписывать его для совместной работы с MODX. Если вы не знаете PHP, то эта задача в вашем случае нерешаема.
avatar
PHP в процессе изучения.
Всё, я всё поняла.
Ресурс хороший, спасибо!
avatar
Ну по коду данного скрипта видно достаточно наглядно, что он делает :)
А девушка правильная, сама экспериментирует и разобраться пытается, а не готовых решений ждет.
avatar
Тут бы полностью код видеть, иначе это танец с бубном какой-то получается.
avatar
Много файлов. Неудобно отправлять (НЕ в смысле зиповать и заливать).

Файлы php
Комментарий такой: index.php вызывается в месте отображения комментов.

Еще есть папка с админкой, но она отлично работает и в «Пользователях» показывает авторизованных и гостевых. Т.е. на странице сайта ничего не происходит, но в БД SQL все пишется.
avatar
Сравните, как запускается сессия в Evo и как в этих комментариях: github.com/evolution-cms/evolution/blob/develop/install/config.inc.tpl#L103 Это и будет ответом на вопрос в заголовке топика. А скрипт комментариев платный, раз поддержка есть?
avatar
Сам и отвечу, скрипт платный и деньги эти выброшены на ветер, так как пользоваться этим скриптом небезопасно.
avatar
Скрипт commenton
Поясните, пожалуйста, что небезапасного?
avatar
Не буду пояснять, а то получится, что я бесплатно улучшаю платный скрипт ((:
avatar
Спасибо. Сильно отличалась. Все что под // start cms session
В моем сайте конфигурации не было вообще. копипастила — проверяла как работает сниппет в три захода, начиная с этого раздела и до верха, пока все не скопировала.
В чем-то другом проблема..)
avatar
Куки должны быть установлены до того, как будут выведено что-либо в браузер.

Попробуйте вызов вашего сниппета поставить самым первым символом шаблона, чтобы до него никакая информация не выводилась.
И в нем убрать строчку с session_start().

То есть должно быть в шаблоне что-то типа такого в начале:

[!Ваш_сниппет!]<!DOCTYPE html>
<html lang="ru">
<head>
....и далее все остальное
avatar
Причем, до открывающей скобки вывода сниппета не должно быть ни переноса строк, ни пробелов.
avatar
Благодарю за отклик)

Стоял сразу под anythingRating, с помощь которого под статьей корректно работают звездочки голосования.
Переставила, как Вы сказали.



Сточку с session_start() удалила. AnythingRating работает, а комментарии — нет.

druzei.live/zhurnal/authors/dina-sorokina/kak-pravilno-nauchit-rebenka-chitat.html
Комментарий отредактирован 2017-09-14 13:16:01 пользователем mari412
avatar
Посмотрите исходный код этой страницы, у вас до <!DOCTYPE html> откуда-то вылезают две пустых строки. У вас точно перед обработкой этого шалона ни в каком плагине никакое echo или print не выводится?

Важно, чтобы перед установкой кук ни один символ не выводился, а у вас их как минимум целых два откуда-то берется.
avatar
И еще, сделайте в каком-то другом сниппете вывод значений $_SESSION и кук, и после перезагрузки страницы посмотите, что именно из них отвалилось.
avatar
1. Спасибо за поддержку!
2.
Посмотрите исходный код этой страницы, у вас до <!DOCTYPE html> откуда-то вылезают две пустых строки.

Простите меня, но я не поняла, как Вы определили, что есть две пустых строчки.



3. Пересмотрела плагины, print или echo не выводятся.

4.
сделайте в каком-то другом сниппете вывод значений $_SESSION и кук
Не знаю правильно ли, сделала сниппет

if (isset($_SESSION['utc'])) {
                if (SetCookie("Test","Value")) echo "<h3>Cookie успешно установлен!</h3>";
else echo "<h3>Cookie установить не удалось!</h3>";
        }


Целиком ничего не выводится, если оставить куки — выводит «Cookie успешно установлен!»
avatar
Ну в смысле
if (SetCookie("Test","Value")) echo "<h3>Cookie успешно установлен!</h3>";
else echo "<h3>Cookie установить не удалось!</h3>";
avatar
Проверять надо не SetCookie (кстати, что за функция в таком регистре?), а читать их.

То есть на пальцах — сначала отрабатывает ваш скрипт, потом рендерится шаблон и выводится страница.

ПОСЛЕ перезагрузки страницы в другом сниппете (а лучше даже на другой странице, где нет вызова проблемноо скрипта) — прочитайте эти куки и сессию, и посомтрите, сохранилось ли там что-нибудь.
avatar
Написание — из Лекций по программированию. Не обратила внимания сразу)))
Если Вы тоже в браузере имели в виду — удалила все куки сайта, перезагрузила главную, где комментов нет, но другие вызовы есть. Вот что мне Хром выдал.
Как-то доступность для скрипта нужно исправить?

avatar
Я имел в виду код, который видно в браузере. (в режиме просмотра исходного кода). Но в вашем скриншоте видно, откуда взялись эти два символа перевода строки, они оба после вызова сниппета стоят, так что дело не в них.
avatar
Да, поняла)
avatar
А никого не смущает, что setcookie вроде как начинают быть доступными только после перезагрузки страницы и что приведенный выше скрипт в случае пустой сессии ничего не сделает и никаких Кук не установит?
  • EGO
  • 0
avatar
Спасибо за отклик!
В админке модерации комментов все пользователи отображаются (хотя на странице ничего не происходит), и также при повторной авторизации, приложения соц сетей уже не просят «разрешите доступ к данным», а сам скрипт только повторно показывает «Успешно».
avatar
1. При загрузке страницы druzei.live/zhurnal/authors/dina-sorokina/kak-pravilno-nauchit-rebenka-chitat.html в консоле ошибка от AnythingRating, а именно ругается на то, что в 10 строке файла anythingRating.js у вас объявлена переменная atrbase, а дальше используется _atrbase.

2. При попытке авторизироваться в комментах через fb выдаёт следующее:
Приложение не настроено: Это приложение все еще в режиме разработки, и у вас нет к нему доступа. Переключитесь на зарегистрированный аккаунт тестового пользователя или попросите администратора предоставить вам разрешения.

3. Самый просто сниппет, чтобы посмотреть все значения в сессии:
<?php
echo "<pre>";
print_r($_SESSION);
echo "</pre>";
?>
Вызывайте в любом удобном месте страницы.

4. Не ищите дешёвых простых путей :) Либо ищите бесплатные альтернативы, либо обратитесь к специалисту или в службу поддержки у платных решений.

Итоги.
— Простой вариант: установить DISQUS (не будет VK-авторизации) или JotX (с ним вообще не будет OAuth).
— Сложный вариант: пытаться разобраться, что же не работает в скрипте, тем самым повысив свой скилл, но потратив много времени.
— Хороший вариант: сделать топик, что готовы поддержать донатом человека, который запилит решение по интеграции EVO с CACKLE.me и призвать других поддержать донатом.
— Не очень хороший вариант: найти за определённую сумму человека, который поможет, а заодно расскажет/покажет/объяснит что не так со скриптом и в итоге всё будет работать, но сообщество от этого профита не получит :)
avatar
1. У меня отображается в консоли, что ошибка в 16 строке — не определена картинка (там гифка процесса загрузки), но она есть и вроде имя правильное, но она и не нужна особо (удалю строчку наверное). В 10 строке добавила "_". Ничего не поменялось — подсвечивает ту же ошибку в 16 строке.

2. Чтобы подключить комментарии — я сама создавала приложения, которые осуществляют авторизацию. Подумаю, с может быть связано… у меня все работает в Експлорере и в Хроме.

3. Очень классная штука! Спасибо)))

4. Я много сервисов пересмотрела, и дешевизна — это не первый критерий.

Итоги: Мне нравится ваш развернутый комментарий.
Единственное, я не поняла «хорошего варианта» — зачем интеграция? Я пробовала Cackle на том же самом модексе, нормально работал.
Есть еще один вариант. Попозже напишу
Комментарий отредактирован 2017-09-14 20:20:33 пользователем mari412
avatar
По поводу пункта 1. Обновите кэш — у вас просто старый js-файл берётся. Самый бронебойный вариант как обновить кэш.

Про хороший вариант написал для того, чтобы был профит сообществу. Готовое решение с синхронизацией БД для тех кому не жалко 200руб/мес. вполне себе неплохой вариант :)
avatar
Вариант бронебойный, спасибо)
А, понятно, синхронизация БД имелась в виду.
avatar
Dreamer , Pathologic , EGO и media_kot
Благодарю вас за участие и подсказки! Проблема решена. Весь функционал работает. Два дня с разработчиком переписывались, допилил)
avatar
Комменты симпатичные, хорошо то, что они в БД, а значит индексируются. Я обычно ставил Disqus или HyperComments, у них есть авторизация через соцсети, но на бесплатных тарифах нет синхронизации с БД.

Вопрос: Разработчик допилил свое решение, и теперь проблем совместимости с MODx нет? или как?
avatar
Добрый день, Андрей!) Точно еще и индексируются. Допилил, авторизация через соц сети, лайки или дислайки комментам, ветка до 5 уровней вложенности и админка модерации отлично работает.
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.