[PHP/Jquery]Sessie variabele naar JS sturen met XHR

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Maarten00
  • Registratie: April 2009
  • Laatst online: 12-09 08:50
Ik probeer om via een XHR de waarde $_SESSION["user"] op te halen. Ik heb al een zeer simpel PHP script dat werkt, wanneer ik echter via een XHR dezelfde waarde probeer op te halen krijg ik alleen maar false.

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?PHP
function checkLogin() {
    if (isset($_SESSION["user"])) {
        return true;
    } else {
        return false;
    }
}

if (isset($_REQUEST["method"])) {
    if ($_REQUEST["method"] == "checkSession") {
        $result = checkLogin();
        $jsonText = json_encode($result);
        echo $jsonText;
    }
}
?>

De functie bovenin werkt prima wanneer ik hem in een andere PHP pagina oproep, wanneer ik via een XHR het onderste stukje code aanroep krijg ik echter altijd false als resultaat, ongeacht of de variabele geset is of niet.

Dit is hoe ik de XHR aanmaak en afhandel:

JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
function checkSession() {
    var params = "method=checkSession";
    $.ajax({
        type : "GET",
        url : "backend/checkSession.php?" + params,
        beforeSend : function(xhr) {
            xhr.overrideMimeType("text/plain; charset=x-user-defined");
        }
    }).done(function(data) {
        if (console && console.log) {
            console.log(data);
        }
    });
}


Het resultaat in mijn console is dus altijd false, wanneer ik de checkLogin() methode op mijn pagina echo krijg ik echter gewoon een 1 wanneer ik ingelogd ben.

Acties:
  • 0 Henk 'm!

  • TJHeuvel
  • Registratie: Mei 2008
  • Niet online
Het lijkt er op dat de XHR request niet dezelfde of geen cookies verstuurt. Kan je dit verifieren met een tool zoals Firebug? Dus check je net tab, kijk in de headers of hier dezelfde `set-cookie` header staat als de originele GET request.

Overigens het volgende:

PHP:
1
2
3
4
5
    if (isset($_SESSION["user"])) { 
        return true; 
    } else { 
        return false; 
    }


Hier staat letterlijk "Als waarde X gelijk is aan true, return true, als waarde X niet gelijk is aan true return false". Dit slaat natuurlijk nergens op, en kan gewoon zo geschreven worden:

PHP:
1
return isset($_SESSION['user']);


aangezien isset gewoon een bool terug geeft.

[ Voor 48% gewijzigd door TJHeuvel op 06-06-2012 15:47 ]

Freelance Unity3D developer


Acties:
  • 0 Henk 'm!

  • Maarten00
  • Registratie: April 2009
  • Laatst online: 12-09 08:50
Dit zijn de headers van mijn request.
Afbeeldingslocatie: http://i.imgur.com/DNXS5l.jpg

En je hebt inderdaad gelijk, dat kan een stuk netter. Ik ben nog niet zo heel lang bezig met webdevelopment dus ik stel je feedback op prijs :)
Ik heb verder ook nog niet met cookies e.d. gewerkt, ik dacht dat deze code simpel zou moeten werken. Het leek me veiliger om op deze manier te checken of een gebruiker ingelogd is dan om een hidden field op mijn pagina te echo'en.

[ Voor 86% gewijzigd door Maarten00 op 06-06-2012 15:58 ]


Acties:
  • 0 Henk 'm!

  • Lye
  • Registratie: Januari 2010
  • Laatst online: 14-09 14:21

Lye

Heb je de sessie wel gestart met session_start()?

Acties:
  • 0 Henk 'm!

  • Maarten00
  • Registratie: April 2009
  • Laatst online: 12-09 08:50
Ja, de sessie is gewoon gestart en wanneer ik in mijn index.php de checkLogin() methode aanroep uit mijn checkSession.php file krijg ik gewoon 1 als resultaat geprint op mijn pagina, wanneer ik ingelogd ben.

Acties:
  • 0 Henk 'm!

  • Lye
  • Registratie: Januari 2010
  • Laatst online: 14-09 14:21

Lye

Je moet de sessie ook starten in het bestand wat je via je XHR opvraagt.

Acties:
  • 0 Henk 'm!

  • Maarten00
  • Registratie: April 2009
  • Laatst online: 12-09 08:50
Het starten van de sessie in het bestand dat ik opvraag hoefde niet per se, omdat ik de file die ik in de XHR opvraag ook include op mijn index pagina, waar ik ook weer de XHR start. Ik kreeg dus ook een melding dat de sessie al gestart was.
Toen ik echter de volgende code bovenaan mijn checkSession.php file toevoegde werkte het wel:
PHP:
1
2
3
if (isset($_SESSION["user"])) {
    $user = $_SESSION["user"];
}


Bedankt, het probleem is dus opgelost zo! :)

[ Voor 6% gewijzigd door Maarten00 op 06-06-2012 16:04 ]

Pagina: 1