Пользовательские сеансы с Joomla

Я пытаюсь создать 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(); ?>