Я пытаюсь создать Joomla на моем существующем веб-сайте, поэтому я могу использовать его для премиального контента.
У меня уже есть настраиваемая система аутентификации, которая устанавливает мои собственные переменные сеанса.
По какой-то причине Joomla (которая находится в другом каталоге) не хочет распознавать эти переменные сеанса даже при добавлении session_start (); строка вверху всех страниц Joomla.
Любая идея, как я могу заставить Joomla распознать мои пользовательские переменные сеанса, чтобы я мог ограничить контент, расположенный в Joomla, только премиум-пользователям?
Спасибо.
Joomla использует собственное управление сеансом, поэтому, когда вы используете сессию php, она не гарантирует работу. Чтобы обойти это, просто попробуйте выполнить управление сеансом joomla.
Это может решить вашу проблему.
Я знаю, что это старый вопрос, но я решил опубликовать решение здесь, если кто-то все еще ищет его.
Joomla использует собственную инфраструктуру и управление сеансами. Вы все равно можете написать свои собственные php-файлы и получить доступ к переменным сессии Joomla. Вам просто нужно загрузить структуру joomla в ваш php-скрипт.
Для J1.6 вам нужно включить следующие строки в начале вашего php-скрипта. ПРИМЕЧАНИЕ. Они должны быть включены в самый верх, поскольку joomla собирается вызвать session_start ().
define( '_JEXEC', 1 ); define( 'JPATH_BASE', realpath(dirname(__FILE__).'/..' )); //you will need to update this path to represent your installation. This path works if you store all your custom php scripts in a subdirectory off the main joomla install directory. define( 'DS', DIRECTORY_SEPARATOR ); require_once ( JPATH_BASE .DS.'includes'.DS.'defines.php' ); require_once ( JPATH_BASE .DS.'includes'.DS.'framework.php' ); $mainframe = JFactory::getApplication('site'); $mainframe->initialise();
После этого вы можете хранить переменные сеанса, используя:
$session->set('msgjson',$msgjson);
чтение переменных сеанса с использованием:
$msgjson = $session->get('msgjson')
и отключить переменные сеанса, используя:
$session->clear('msgjson');
Это работает для J1.6. Вам, вероятно, потребуется изменить строки, которые загружают структуру joomla для других версий. Я бы начал с index.php в корневом каталоге Joomla, поскольку он должен загрузить фреймворк.
Надеюсь, это поможет.
Joomla, скорее всего, инициализирует собственный сеанс (мы будем называть его сеансом «B») отдельно от другой системы, о которой вы говорите, которая определяет, получает ли пользователь «премиальный» сеанс (мы будем называть этот сеанс «A», ). Когда начинается сеанс «B», я не думаю, что сеанс «B» будет возможен для доступа к информации в сеансе «A».
Мое предложение обойти это было бы написать код обработки сеанса в чистом PHP и запустить этот код до того, как Joomla загрузит собственный сеанс. Таким образом, когда вы запустите session_start (), он должен поймать сеанс «A».
Хорошим способом получить это в Joomla было бы написать плагин «System» и вызвать функцию «onAfterInitialise», вызвав эту функцию get, прежде чем Joomla даже настроит сеанс (по крайней мере, я уверен в этом .. ха-ха) ,
<?php // no direct access defined( '_JEXEC' ) or die( 'Restricted access' ); jimport( 'joomla.plugin.plugin' ); class plgSystemPremium extends JPlugin { function onAfterInitialise() { // ... load session // if premium user, return // else, redirect user to a registration page or whatever } } ?>
Возможно, ваша система аутентификации использует файлы cookie и задает путь к файлу cookie, который запрещает браузеру отправлять cookie сеанса id обратно в сценарий joomla.
Путь файлов cookie, вероятно, будет установлен через session_set_cookie_params () или ini_set () .
Joomla 1.5 использует класс JSession .
Поскольку все в Joomla работает на основе собственной внутренней структуры, я бы не рекомендовал писать чистый PHP для чего-то вроде сеансов, так как вполне вероятно, что Joomla перезаписывает старые переменные сеанса при инициализации собственного внутреннего кода управления сеансом.
Я использовал jumi
, отличный бесплатный компонент для joomla
который ссылается на любой файл и поддерживает данные сеанса.
Если вам нужна чистая страница, используйте ob_end_clean();
в верхней части нового файла и die;
в конце, чтобы очистить шаблон joomla.
я продолжаю видеть, что люди говорят, что phpsessions не будет работать в joomla, и я не был готов изучить структуру joomla для управления сессиями, у меня не было времени на это, поэтому я сделал несколько тестов, и я обнаружил, что если вы просто запустите сеанс php на главной странице вашего шаблона, а не на странице индекса сайта, он будет работать нормально. просто поместите эту строку кода на верхнюю страницу страницы шаблона:
<?php // Starting the phpsession session_start(); ?>