Internet Explorer onthoudt sessies niet

Status
Niet open voor verdere reacties.

OekelWm

Gebruiker
Lid geworden
23 feb 2007
Berichten
60
Ik heb een site gemaakt met een (simpel) loginsysteem. Deze werkt perfect in Google Chrome en Firefox, maar niet in Internet Explorer. Zodra je bent ingelogd wordt er een session variable aangemaakt, die weer op de hoofdpagina wordt uitgelezen om te kijken of je bent ingelogd. Dit is zo ongeveer het idee:
Code in login.php:
PHP:
session_start();
session_register("myusername");
Code in index.php:
PHP:
session_start();
if(session_is_registered(myusername))
{
uit te voeren code
}

In Chrome en Firefox werkt het helemaal goed. Maar in IE ziet index.php er gewoon net zo uit als wanneer je niet bent ingelogd.
Het lijkt er dus op dat IE deze sesies niet onthoudt. Hoe los ik dit op? Wat doe ik fout?
 
Session_register() is een geschrapte functie, dus ik raad je zoieso niet aan deze te gebruiken...

Ipv dat kan ik (op basis van je code) wel een ander voorbeeldje geven dat waarschijnlijk wel werkt:

PHP:
<?php
// start sessie
session_start();

// vul myusername
$_SESSION['myusername'] = TRUE;


// controle
if(isset($_SESSION['myusername']) && $_SESSION['myusername'] == TRUE) {
// voer code uit als $_SESSION['myusername'] TRUE is
} else {
// voer andere code uit als $_SESSION['myusername'] niet TRUE is of niet bestaat
}

?>
 
Session_register() is een geschrapte functie, dus ik raad je zoieso niet aan deze te gebruiken...

Ipv dat kan ik (op basis van je code) wel een ander voorbeeldje geven dat waarschijnlijk wel werkt:

PHP:
<?php
// start sessie
session_start();

// vul myusername
$_SESSION['myusername'] = TRUE;


// controle
if(isset($_SESSION['myusername']) && $_SESSION['myusername'] == TRUE) {
// voer code uit als $_SESSION['myusername'] TRUE is
} else {
// voer andere code uit als $_SESSION['myusername'] niet TRUE is of niet bestaat
}

?>


Deze manier werkt voor mij op exact dezelfde wijze niet. In Google Chrome werkt het, maar niet in Internet Explorer.
Code nu (login.php)
PHP:
session_start();
$_SESSION['ingelogd'] = TRUE;
Code nu (index.php)
PHP:
<?php 
session_start();
$_SESSION['loggedin']=0;
if(isset($_SESSION['ingelogd']) && $_SESSION['ingelogd'] == TRUE)
{
$_SESSION['loggedin']=1;
}
else
{
$_SESSION['loggedin']=0;
}
echo $_SESSION['loggedin'];
?>
"echo $_SESSION['loggedin'];" geeft nu als output 0.
 
Even voor de duidelijkheid: PHP is serverside, dus het kan niet zijn dat het in de ene browser wel werkt en in de andere niet. Het kan wel zijn dat de ene browser zo staat ingesteld dat ie geen cookies accepteerd, maar meer kan er niet aan de hand zijn.

Maak eerst even een bestandje waarmee je de sessies in je browser kunt vernietigen:
PHP:
<?php
session_destroy();
?>
Voer dit script in iedere browser uit. Daarna kun je weer verder met testen.
 
Inderdaad, het was iets met de standaard beveiligingsinstellingen in IE (i.c.m. gebruik frames). Het toevoegen van het volgende 'magische' regeltje op elke pagina die met sessies werkt lost het probleem op:
PHP:
header('P3P:CP="IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT"');
Bron: http://adamyoung.net/IE-Blocking-iFrame-Cookies

Bedankt voor de hulp.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan