2010-05-18 3 views
5

Anmelden bei einer Site Ich arbeite an Funktionen wie erwartet auf meinem lokalen Computer, scheitert jedoch auf dem Remote-Server NUR in Internet Explorer. Der Kicker ist, dass es lokal in IE funktioniert, nur nicht auf dem Remote-Rechner.Sitzungsvariablen werden nicht festgelegt, aber nur in Internet Explorer und nicht auf allen Computern

Was in der Welt könnte das verursachen? Ich bin durch den Code auf dem Remote-Computer gegangen und kann sehen, dass die eingegebenen Login-Werte in der Datenbank überprüft werden, sie werden gefunden und dann wird eine Login-Funktion aufgerufen. Dies setzt zwei $ _SESSION-Variablen und leitet auf die Haupt-Admin-Seite um. Aber nur im IE (und nicht, wenn es auf dem lokalen Rechner läuft ... das ist der Schlüssel) sind die $ _SESSION-Variablen nicht vorhanden, wenn Sie auf die Haupt-Admin-Seite gelangen. var_dump($_SESSION) gibt mir, was ich in jedem Browser erwarte, wenn ich dies in meiner lokalen Umgebung und in jedem Browser außer IE 6, 7 und 8 bei der Ausführung auf dem Remote-Server (wo ich einen Nullwert als ob nichts für $ festgelegt wurde) _SESSION).

Das hat mich wirklich ratlos, so dass jeder Ratschlag geschätzt wird.

Ein Beispiel ... in IE, lokal ausführen, var_dump gibt mir:

array 
'Username' => string 'theusername' length=11 
'UserID' => string 'somevalue' length=9 

Run auf dem Remote-Server (nur IE ... funktioniert in anderen Browsern) Var_dump gibt mir:

array(0){} 

-Code (ein minimales Beispiel ... wenn wirklich ein Codebeispiel ist nicht mit diesem Thema erforderlich):

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

EDIT: Gelöst dies. Es war die Tatsache, dass der Domänenname auf dem Testserver einen Unterstrich enthielt. Keine Ahnung warum und momentan keine Zeit für Google, aber der Unterstrich, so etwas wie some_client.ourcompany.com genannt, war das Problem. Ich muss den Internet Explorer lieben ... es ist wie ein passiv aggressiver Kollege, dem man einfach nicht ausweichen kann.

+0

Codebeispiel für uns zu betrachten? –

+0

Haben Sie 'session_start();' oben auf jeder Seite eingefügt? – Alec

+0

Haben Sie session_start() eingeschlossen? oben auf jeder Seite? Ja. – Stuart

Antwort

2

Putting dies als Antwort (vom Benutzer Tuzo vorgeschlagen), um es einfacher zu finden. Gelöst dies. Es war die Tatsache, dass der Domänenname auf dem Testserver einen Unterstrich enthielt.Keine Ahnung warum und momentan keine Zeit für Google, aber der Unterstrich, so etwas wie some_client.ourcompany.com genannt, war das Problem. Ich muss den Internet Explorer lieben ... es ist wie ein passiv aggressiver Kollege, dem man einfach nicht ausweichen kann.

Aus einer anderen SO-Antwort ... erklärt genau was los ist: Verwendet eine der Subdomains einen Unterstrich? IE hat Probleme, Cookies von Subdomains zu akzeptieren, die nicht dem URI-RFC folgen. (http://www.ietf.org/rfc/rfc2396.txt)

0

Versuchen Sie, session_start(); . Am oberen Rand der Seite, um die Sitzungen in machen und prüfen Sie, ob Sie die Sitzung vergeben Vars den richtigen Weg:

$_SESSION['SESSION_NAME'] = 'sessionValue'; 
+1

Was ist falsch mit dem Weg des OP? Auch wenn es in jedem Browser außer IE (s) funktioniert, fügt er offensichtlich 'session_start()' auf jeder Seite ein ... –

1

Überprüfen Sie den Wert von session.cookie_domain in der php.ini-Datei. Wenn dieser Wert festgelegt ist, stellen Sie sicher, dass dies der Fall ist. Das ist das Größte, was ich mir vorstellen kann, das sich lokal anders als remote verhalten könnte.

Wenn Sie einen Wert auf session.cookie_lifetime festgelegt haben, versuchen Sie, diese Zeile in Ihrer php.ini zu kommentieren. Ich habe ein merkwürdiges Verhalten mit IE gesehen, als ich dort einen Wert fallen ließ.

Hier ist ein Quickie Session Checker. Wenn Sie die Seite erneut laden und weiterhin neue Werte für das Token sehen, erhalten Sie keine dauerhafte Sitzung. Dann kannst du definitiv die Server/PHP-Konfiguration und nicht deinen Code beschuldigen. Das ist absolut wahr

<?php 
session_start(); 
if (!isset($_SESSION['token'])) { 
    $_SESSION['token'] = sha1(uniqid(rand(), true)); 
} 

if (!empty($_POST)) { 
    $_SESSION['hi'] = preg_replace('/[^\w ]+/','',$_POST['hi']); 
    header("Location: index.php"); 
    exit; 
} 

?> 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
<head> 
<title>Session test</title> 
</head> 
<body> 

<h1>How's that session doing?</h1> 
<p>Message: <?=htmlspecialchars($_SESSION['hi'])?></p> 
<p>Token: <?=htmlspecialchars($_SESSION['token'])?></p> 


<form action="index.php" method="post"> 
<fieldset> 
    <label for="hi">What do you have to say?</label> 
    <input type="text" name="hi" id="hi"> 
    <input type="submit" value="Submit"> 
</fieldset> 
</form> 

</body> 
</html> 
1

„Es war die Tatsache, dass der Domain-Name auf dem Testserver einen Unterstrich, es wäre“ . Dieser Beitrag wurde gefunden, nachdem Sie mehr als 3 Stunden damit verbracht haben, das gleiche Problem zu lösen. Vielen Dank an Gaoshan88

0

Wir hatten das gleiche Problem, aber es war nicht die Server-Namen Zeichen, aber die Server-Zeit, die nicht richtig war. Dies führte dazu, dass unsere Session-Cookies im IE sofort ungültig waren, während sie in anderen Browsern funktionierten.

Verwandte Themen