Avatar billede ljm21 Praktikant
23. september 2011 - 09:54 Der er 4 kommentarer og
1 løsning

Joomla og sessions

Hejsa

Jeg sidder og koder på en side, der er bygget op i PHP og JavaScript som benytter sig af AJAX. Siden skal indlejres i en Joomla-side og benytte brugerinformation derfra.

For at finde ud af om en bruger er logget ind og med hvilket bruger id bruger jeg følgende:
<?php
define( '_JEXEC', 1 );
define( 'DS', DIRECTORY_SEPARATOR );
define('JPATH_BASE', dirname(__FILE__).DS. '../joomla' );
require_once ( JPATH_BASE .DS.'includes'.DS.'defines.php' );
require_once ( JPATH_BASE .DS.'includes'.DS.'framework.php' );

$mainframe =& JFactory::getApplication('site');
$mainframe->initialise();

$mainframe->route();
$user =& JFactory::getUser();
?>

Det virker fint - jeg kan hente mine brugeroplysninger i arrayet $user.

Problemet er at ovenstående linier sletter min egen session, som jeg har hårdt brug for. Jeg har forsøgt at indsætte min session_start(); både før og efter Joomla-linierne, men det nytter ikke. Alle min gemte data er væk :-(.

Hvordan undgår jeg at Joomla ødelægger min session?

Mvh
Lars Mikkelsen
23. september 2011 - 10:33 #1
Nu er jeg selv Joomla begynder, så måske rammer jeg ved siden af, men jeg ville mene, at du skal skippe linierne:

$mainframe =& JFactory::getApplication('site');
$mainframe->initialise();
$mainframe->route();

og gå direkte til

$user =& JFactory::getUser();

JFactory::getUser() metoden ser (som du måske ved) således ud:

function &getUser($id = null)
{
    jimport('joomla.user.user');
    if(is_null($id))
    {
        $session  =& JFactory::getSession();
    $instance =& $session->get('user');
    if (!is_a($instance, 'JUser'))
        {
    $instance =& JUser::getInstance();
    }
    }
    else
    {
        $instance =& JUser::getInstance($id);
    }
    return $instance;
}

så jeg ville mene, at du derved går ind i den bestående session og henter useren.
Avatar billede ljm21 Praktikant
23. september 2011 - 10:42 #2
Hej Christian

Tak for dit svar. Jeg har lige forsøgt og det virker desværre ikke. Jeg får følgende fejl:

Fatal error: Class 'JLog' not found in joomla/libraries/joomla/database/database.php on line 1451

Jeg har nok ikke været helt præcis nok i min beskrivelse. Mit script er selvstændigt, så Joomla er ikke "startet", og derfor er jeg nødt til at gøre det for at få adgang til brugeroplysningerne, og det er der min egen session bliver overskrevet.

Venlig hilsen
Lars
23. september 2011 - 12:34 #3
Jamen så kikker jeg med her, så vi begge kan lære af de indlæg der forhåbenligt kommer.
Avatar billede ljm21 Praktikant
23. september 2011 - 14:15 #4
Jeg har selv fundet en løsning, der virker - omend den er lidt kluntet...

joomla_user.php:
<?php
define( '_JEXEC', 1 );
define( 'DS', DIRECTORY_SEPARATOR );
define('JPATH_BASE', dirname(__FILE__).DS. '../joomla' );
require_once ( JPATH_BASE .DS.'includes'.DS.'defines.php' );
require_once ( JPATH_BASE .DS.'includes'.DS.'framework.php' );

$mainframe =& JFactory::getApplication('site');
$mainframe->initialise();

$mainframe->route();
$user =& JFactory::getUser();

echo $user->id;
?>

I mit script hvor jeg skal bruge userid:
$_SESSION['userid'] = file_get_contents('http://domæne.dk/absolut/sti/til/joomla_user.php');

På denne måde bliver joomla_user.php åbnet i sit eget variabel-scope og overskriver dermed ikke min session.
Bemærk at allow_url_fopen skal være  "on".

Hvis der er nogle der ligger inde med en mere elegant løsning vil jeg gerne høre om den :-)

/Lars
26. september 2011 - 16:28 #5
Du fik ingen elegantere løsning, og nu da spørgsmålet er kommet 'under horisonten' og er på side 7 af spørgsmål er det næppe så sandsynligt, at der kommer nye svar til.  Måske ville du lukke spørgsmåæet (ved at acceptere dit eget svar), så der er ryddet op og du får pointene tilbage (og det ikke længere står som åbent i min liste af indlæg.)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester