2010-09-18 10 views
5

ich eine Session-Variable, die ich wie folgt festgelegt:PHP Session-Variable Änderungen zwischen den Seiten

<?php 
$token = md5(uniqid(rand(), true)); 
session_start(); 
$_SESSION['token'] = $token; 
print $_SESSION['token']; 
?> 

Dann auf einer anderen Seite habe ich dies:

<?php 
session_start(); 
print $_SESSION['token']; 
?> 

Das Problem ist, dass sie es nicht tun Spiel. Ich bekomme zwei völlig unterschiedliche Saiten. register_globals ist ausgeschaltet. Ich habe bemerkt, dass, wenn ich md5(....) auf eine konstante Zeichenfolge zB: md5('example') gesetzt habe, dass es wie erwartet funktioniert und die zwei Zeichenfolgen übereinstimmen. Aber das sollte nicht wichtig sein. Irgendwelche Ideen, was hier vor sich geht?

EDIT: Apache Acces Log:

127.0.0.1 - - [18/Sep/2010:17:46:09 -0500] "GET /index.php HTTP/1.1" 200 3182 "-" "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_4; en-US) AppleWebKit/534.3 (KHTML, like Gecko) Chrome/6.0.472.59 Safari/534.3" 
127.0.0.1 - - [18/Sep/2010:17:46:09 -0500] "GET /style/style.css HTTP/1.1" 304 - "http://cmb.local:8888/index.php" "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_4; en-US) AppleWebKit/534.3 (KHTML, like Gecko) Chrome/6.0.472.59 Safari/534.3" 
127.0.0.1 - - [18/Sep/2010:17:46:09 -0500] "GET /js/signup.js HTTP/1.1" 304 - "http://cmb.local:8888/index.php" "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_4; en-US) AppleWebKit/534.3 (KHTML, like Gecko) Chrome/6.0.472.59 Safari/534.3" 
127.0.0.1 - - [18/Sep/2010:17:46:09 -0500] "GET /index.php HTTP/1.1" 200 3182 "http://cmb.local:8888/index.php" "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_4; en-US) AppleWebKit/534.3 (KHTML, like Gecko) Chrome/6.0.472.59 Safari/534.3" 
127.0.0.1 - - [18/Sep/2010:17:46:10 -0500] "GET /index.php HTTP/1.1" 200 3182 "http://cmb.local:8888/index.php" "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_4; en-US) AppleWebKit/534.3 (KHTML, like Gecko) Chrome/6.0.472.59 Safari/534.3" 

Ich bin nicht ganz sicher, wie das lesen, aber es scheint mir, dass meine Datei (index.php, die ich davon ausgehen, ist die ‚/‘) wird dreimal aufgerufen. Lies ich das richtig? Was ist da los?

+0

Ich kann dieses Verhalten nicht reproduzieren. Überprüfen Sie Ihre Zugriffsprotokolle und geben Sie weitere Informationen über die von Ihnen verwendete Umgebung an. Es ist offensichtlich, dass der bereitgestellte Code nicht das gesamte System ist, sondern Sie das Token wahrscheinlich an einem anderen Ort zurücksetzen. –

+0

Es ist bekannt, dass einige Browser-Plugins das Verhalten verursachen, dass mehrere Anforderungen gesendet werden, anstatt eines. – James

+0

@Josh K Ich bin nicht ... beide Seiten sind für den Moment statisch. Das einzige, was gesetzt oder geändert wird, ist das Token und das passiert nur an einer Stelle, wie oben gezeigt. – williamg

Antwort

3

Völlig blöder Fehler von meiner Seite. Ich hatte ein paar leere Tags, die die zusätzlichen Anfragen verursachten. facepalm Sorry alle, Problem gelöst. Danke für Ihre Hilfe!!

1

Sieht seltsam aus. Dieser erste Codeabschnitt, der das Token zurücksetzt, muss irgendwie erneut ausgeführt worden sein.

2

Die einzige Lösung, die ich denken kann, ist, dass Sie eine zweite Anfrage an die erste Seite machen, ohne es zu wissen. Sie sollten wahrscheinlich die Apache-Zugriffsprotokoll für diesen zweiten Zugang prüfen ...

eine einfache Anforderungszähler zu machen wäre eine andere Lösung sein, dies zu überprüfen:

$_SESSION['counter'] = isset($_SESSION['counter'])? $_SESSION['counter'] +1 : 0; 
+0

Ja, das ist das Problem. Wenn ich diesen Code hineinsetze, bekomme ich 2. Ich kann nicht herausfinden warum, aber ... Es ist eine statische Seite außer dem Token-Teil. Kein Looping, Aktualisierung des Inhalts usw. – williamg

+0

Ich habe mein Apache Access-Protokoll oben veröffentlicht. – williamg

+0

Sie meinen, jedes Mal, wenn Sie die Seite aktualisieren, wird 2 anstelle von einem hinzugefügt? Sie sehen 2, 4, 6 usw.? Haben Sie spezielle Erweiterungen in Ihrem Browser? Wie HTML-Validator für Firefox? – greg0ire

2

Sie, dass Sie jedes Mal feststellen, wird die erste Seite wieder besuchen , Ihre Sitzungsvariable wird sich ändern. Da es für eine konstante Zeichenfolge, "Beispiel", funktioniert, gehe ich davon aus, dass Sie Seite 1 erneut aufrufen, um zu sehen, was dort gespeichert ist.

Ein Fix konnte sicherstellen, dass diese Sitzungsvariable nicht festgelegt wird, bevor Sie sie erneut festlegen. heißt

<?php 
session_start(); 
if(!empty($_SESSION['token'])){ 
    $token = md5(uniqid(rand(), true)); 
    $_SESSION['token'] = $token; 
} 
print $_SESSION['token']; 
?> 

Dieses Stück Code sollte wie erwartet funktionieren.

+0

Nein, das gleiche Problem, aber danke fürs ausprobieren! – williamg

+0

Sehr nützliche Antwort. Zwei Daumen hoch, Bruder! –

Verwandte Themen