Вопрос по php, session – Пользовательские сессии с Joomla

1

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

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

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

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

Спасибо.

Ваш Ответ

7   ответов
0

ваша система аутентификации использует куки и устанавливаетпуть печенья это не позволяет браузеру отправлять cookie с идентификатором сессии обратно в скрипт joomla.
Путь cookie, вероятно, будет установлен черезsession_set_cookie_params () или жеini_set ().

4

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

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

1

скорее всего, инициализирует свой собственный сеанс (мы будем называть его сеансом 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
    }
}
?>
0

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

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

0

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

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

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

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

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

0

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

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

Похожие вопросы