Sessões personalizadas com Joomla

Eu tentei criar o Joomla no meu site existente para que eu possa usá-lo para conteúdo premium.

Eu já tenho um sistema de autenticação personalizado que define minhas próprias variables ​​de session.

Por algum motivo, o Joomla (que está localizado em um diretório diferente) não quer reconhecer essas variables ​​de session, mesmo quando adiciona session_start (); linha no topo de todas as páginas do Joomla.

Alguma idéia de como posso obter o Joomla para reconhecer minhas variables ​​de session personalizadas para que eu possa limitar o conteúdo localizado no Joomla para apenas usuários premium?

Obrigado.

O Joomla usa seu próprio gerenciamento de session, então, quando você usa a session do PHP, isso não funcionará de forma segura. Para contornar isso, tente apenas usar joomla session management.

Isso pode resolver seu problema.

Eu sei que esta é uma pergunta antiga, mas eu decidi publicar uma solução aqui caso alguém ainda esteja procurando por ela.

Joomla usa sua própria estrutura e gerenciamento de session. Você ainda pode escrever seus próprios arquivos php e acessar as variables ​​da session do Joomla. Você só precisa carregar o framework joomla em seu script php.

Para J1.6 você precisa include as seguintes linhas no início do seu script php. NOTA: estes devem ser incluídos no topo, pois o joomla vai chamar uma 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(); 

Depois de fazer isso, você pode armazenar variables ​​de session usando:

 $session->set('msgjson',$msgjson); 

leia as variables ​​de session usando:

 $msgjson = $session->get('msgjson') 

e desarmar variables ​​de session usando:

 $session->clear('msgjson'); 

Isso funciona para J1.6. Você provavelmente precisará alterar as linhas que carregam o framework joomla para outras versões. Eu começaria com o index.php no diretório raiz do Joomla, pois ele precisaria carregar a estrutura.

Eu espero que isso ajude.

Joomla provavelmente iniciará sua própria session (chamaremos a session “B”) separada do outro sistema do qual você está falando, que determina se o usuário recebe a session “premium” (chamaremos esta session “A” ). Uma vez que a session “B” começa, não acho que seja possível que a session “B” acesse informações na session “A”.

Minha sugestão para conseguir isso seria escrever o código de manipulação de session no PHP puro e executar esse código antes de o Joomla carregar sua própria session. Dessa forma, quando você executar session_start (), deve pegar a session “A”.

Uma boa maneira de conseguir isso no Joomla seria escrever um plugin “Sistema” e chamar a function “onAfterInitialise”, esta function é chamada antes do Joomla ter configurado a session (pelo menos, tenho certeza sobre isso … haha) .

 < ?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 } } ?> 

Talvez seu sistema de autenticação use cookies e estabeleça um caminho de cookie que impede que o navegador envie o cookie de session-ID de volta para o script joomla.
O caminho do cookie provavelmente seria definido via session_set_cookie_params () ou ini_set () .

Joomla 1.5 usa uma class JSession .

Como tudo no Joomla é alimentado por sua própria estrutura interna, não recomendaria escrever PHP puro para algo como sessões, pois é provável que o Joomla substitua as variables ​​da session antiga quando inicializa seu próprio código interno de gerenciamento de session.

Eu usei jumi , um ótimo componente gratuito para o joomla que liga a qualquer arquivo e mantém os dados da session.

Se você precisar de uma página limpa, use ob_end_clean(); no topo do novo arquivo e die; no final para limpar o modelo joomla.

Eu continuo vendo as pessoas dizendo que as sessões não funcionarão na joomla e eu não estava pronto para aprender o framework joomla para o gerenciamento de session, eu não tive tempo para isso, então fiz alguns testes e descobri que se você simplesmente Comece a session php na página principal do seu modelo e não na página do índice do site, ele funcionará bem. basta colocar esta linha de código na página superior da página do modelo:

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