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

Я пытаюсь встроить Joomla в свой существующий веб-сайт, чтобы использовать его для премиум-контента.

У меня уже есть собственная система аутентификации, которая устанавливает мои собственные переменные сеанса.

По какой-то причине Joomla (который находится в другом каталоге) не хочет распознавать эти переменные сеанса, даже при добавлении session_start (); строка вверху всех страниц Joomla.

Любая идея, как я могу заставить Joomla распознавать мои пользовательские переменные сеанса, чтобы я мог ограничить содержимое, расположенное в Joomla, только премиум-пользователями?

Спасибо.

Ответы на вопрос(7)

как люди говорят, что phpsessions не будут работать в Joomla, и я не был готов изучить фреймворк Joomla для управления их сессиями, у меня не было на это времени, поэтому я провел несколько тестов и обнаружил, что если вы просто Запустите сеанс php на главной странице вашего шаблона, а не на индексной странице вашего сайта, он будет работать нормально. просто поместите эту строку кода на верхнюю страницу страницы вашего шаблона:

<?php
// Starting the phpsession
session_start();    
?>
,

что это старый вопрос, но я решил опубликовать решение здесь на тот случай, если кто-то все еще его ищет.

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, поскольку он должен загружать фреймворк.

Надеюсь, это поможет.

скорее всего, инициализирует свой собственный сеанс (мы будем называть его сеансом B) отдельно от другой системы, о которой вы говорите, которая определяет, получает ли пользователь премиум «премиум». сеанс (мы будем называть этот сеанс "A"). Однажды сессия "B" начинается, я не думаю, что это будет возможно для сеанса "B" для доступа к информации в сеансе "A".

Мое предложение обойти это - написать код обработки сеанса на чистом PHP и запустить этот код до того, как загрузит собственный сеанс. Таким образом, когда вы запускаете session_start (), он должен перехватывать сеанс & quot; A & quot ;.

Хороший способ добавить это в - написать «Систему». подключить и вызвать функцию «onAfterInitialise» эта функция вызывается до того, как даже настроит сеанс (по крайней мере, я в этом совершенно уверен ... ха-ха).

<?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 с идентификатором сессии обратно в скрипт joomla.
Путь cookie, вероятно, будет установлен черезsession_set_cookie_params () или жеini_set ().

поэтому, когда вы используете php session, это не гарантирует работу. Чтобы обойти это, просто попробуйте использовать управление сессиями joomla.

Это может решить вашу проблему.

JSession учебный класс.

Поскольку все в Joomla основано на его собственной внутренней структуре, я бы не рекомендовал писать чистый PHP для чего-то вроде сессий, поскольку вполне вероятно, что Joomla перезаписывает старые переменные сессии, когда инициализирует свой собственный внутренний код управления сессиями.

jumiотличный бесплатный компонент дляjoomla который ссылается на любой файл и поддерживает данные сеанса.

Если вам нужна чистая страница, используйтеob_end_clean(); в верхней части нового файла иdie; в конце очистить шаблон Joomla.

Ваш ответ на вопрос