La connexion à un site sur lequel je travaille fonctionne normalement sur ma machine locale mais échoue sur le serveur distant, mais SEULEMENT dans Internet Explorer. Le kicker est que cela fonctionne dans IE localement, mais pas sur la machine distante.Les variables de session ne sont pas définies mais uniquement dans Internet Explorer et pas sur toutes les machines
Qu'est-ce que dans le monde pourrait causer cela? J'ai parcouru le code sur la machine distante et peut voir les valeurs de connexion entrées étant vérifiées dans la base de données, ils sont trouvés, puis une fonction de connexion est appelée. Cela définit deux variables $ _SESSION et redirige vers la page d'administration principale. Cependant, dans IE seulement (et non lorsqu'il est exécuté sur la machine locale ... c'est la clé) les variables $ _SESSION ne sont pas présentes au moment où vous arrivez à la page d'administration principale. var_dump($_SESSION)
me donne ce que j'attends sur tous les navigateurs quand j'utilise ceci dans mon environnement local et dans tous les navigateurs sauf IE 6, 7 et 8 lorsqu'ils sont exécutés sur le serveur distant (où j'obtiens une valeur nulle comme si rien n'a été _SESSION).
Cela m'a vraiment perplexe donc tout conseil est apprécié.
Pour un exemple ... dans IE, exécutez localement, var_dump me donne:
array
'Username' => string 'theusername' length=11
'UserID' => string 'somevalue' length=9
Exécuter sur le serveur distant (IE uniquement ... fonctionne très bien dans d'autres navigateurs) var_dump me donne:
array(0){}
code (un exemple minimal ... mais vraiment un exemple de code n'est pas nécessaire avec ce numéro):
$User = GetUser($Username, $Password);
if ($User->UserID <> "") { // this works so we call Login()...
Login($User); // this also works and gives expected results. on to redirect...
header("Location: index.php"); // a var_dump at index.php shows that there is no session data at all in IE, remotely.
} else {
header("Location: login.php");
}
function Login($data) {
$_SESSION['Username'] = $data->Username;
$_SESSION['UserID'] = $data->UserID;
// a var dump here gives the expected data in every browser
}
ÉDIT: Résolu ceci. C'était le fait que le nom de domaine sur le serveur de test avait un trait de soulignement. Aucune idée pourquoi et ne pas avoir le temps de Google pour le moment, mais le trait de soulignement, nommé quelque chose comme some_client.ourcompany.com, était le problème. Dois aimer Internet Explorer ... c'est comme un collègue agressif passif que vous ne pouvez tout simplement pas éviter.
Échantillon de code pour nous à regarder? –
Avez-vous ajouté 'session_start();' au-dessus de chaque page? – Alec
Avez-vous inclus session_start(); en haut de chaque page? Oui. – Stuart