2009-05-06 6 views
4

Ich versuche, mein Skript URL-Sitzungs-ID anstelle von Cookies zu verwenden. Die folgende Seite nimmt die Variable in der URL nicht als Sitzungs-ID auf. Ich muss etwas verpassen.Sitzungs-ID über URL übergeben

Erste Seite http://www.website.com/start.php

ini_set("session.use_cookies",0); 
ini_set("session.use_trans_sid",1); 
session_start(); 
$session_id = session_id(); 
header("location: target.php?session_id=". $session_id); 

Nächste Seite - http://www.website.com/target.php?session_id=rj3ids98dhpa0mcf3jc89mq1t0

ini_set("session.use_cookies",0); 
ini_set("session.use_trans_sid",1); 
print_r($_SESSION); 
print(session_id()) 

Ergebnis ist eine andere Session-ID und die Sitzung ist leer.

Array ([Debug] => no) pt1t38347bs6jc9ruv2ecpv7o2

+0

Sie sind ein PHP-Framework von einer Art verwenden? Stock PHP interpretiert nichts automatisch in der Querystring, daher gibt es keine implizite Verbindung zwischen $ _SESSION und $ _GET ['session_id']. – johnvey

+7

Denken Sie daran, dass das Setzen der Sitzungs-ID in die URL bedeuten kann, dass sie über HTTP-Referrer ... – bdonlan

+1

Wir haben unseren eigenen dedizierten Apache-Server mit PHP. Es wird nicht geteilt. Wird dies ein Sicherheitsrisiko sein? –

Antwort

3

Es sieht aus wie Sie gerade session_start() auf der zweiten Seite aufrufen müssen.

Aus der Dokumentation:

session_start() erzeugt eine Session oder nimmt die aktuelle auf die aktuelle Session-ID basiert, die über eine Anforderung übergeben wird ist, wie GET, POST oder ein Cookie.

EDIT:

Das heißt, können Sie auch aus dem Query-String-Grabbing versuchen manuell die Session-ID. Auf der zweiten Seite müssen Sie so etwas wie zu tun:

ini_set("session.use_cookies",0); 
ini_set("session.use_trans_sid",1); 
session_id($_GET['session_id']); 
print_r($_SESSION); 
print(session_id()); 

Beachten Sie, dass die session_id() Funktion stellen Sie die ID, wenn Sie ihm die ID als Parameter übergeben.

+0

Danke. Das hat den Trick gemacht. –

+0

Ihre erste Antwort vor der Bearbeitung hat Ihnen am meisten geholfen. Die Session-ID ($ _ GET ['Session-ID']); machte den Unterschied. –

+0

Dann werde ich es wieder bearbeiten in :) –

4

Seien Sie vorsichtig, wenn Sie die URL verwenden, um Sitzungs-IDs zu übergeben, die zu Session-Hijacking über den Referer führen könnten!

+0

wie ist das möglich – YdB

+0

@bboni in der Theorie: Browser fügen die URL der Seite, die Link stammt aus dem Header (der "Referer"). Wenn die Sitzungs-ID ein URL-Parameter ist, kann die verknüpfte Seite jetzt die Sitzung übernehmen. Ich weiß nicht, welche zusätzlichen Schutzmaßnahmen php dagegen anwendet, aber es gilt allgemein als unsicher. – stefs

1

Mein Problem war Blitz in FF mit (als Flash-Schweinchen IE unterstützt, so Sitzungen werden nicht zwischen dem Flash-Objekt und firefox gemeinsam)

mit PHP 5.3 all diesen Antworten auf der Wahrheit hingewiesen. Was ich schließlich gefunden habe, war ziemlich einfach. Übergeben Sie die ID in der Abfragezeichenfolge. Stell es ein. DANN starten Sie die Sitzung.

session_id($_GET['PHPSESSID']); 
session_start(); 
2

statt Hardcoding 'PHPSESSID', verwenden Sie diese:

session_id($_GET[session_name()]); 
+0

Sie müssen den Sitzungsnamen weiterhin kennen, um ihn als GET-Parameter zu übergeben. Dies ist jedoch eine gute Methode, wenn Sie den Sitzungsnamen dynamisch über eine Variable definieren. –