2009-03-05 8 views
18

Ich habe versucht, diesen Mechanismus zu erforschen, aber finde nur Hinweise und diese sind nicht sehr konsistent. Wie wird die Sitzung _id an den Browser gesendet und wie wird der Browser angewiesen, sie zurückzugeben, wenn der Benutzer eine neue Seite anfordert?Wie funktionieren PHP-Sitzungen, wenn Cookies deaktiviert sind?

Danke, Chris

+0

Siehe auch [Ist mein Verständnis von PHP-Sitzungen korrekt?] (Http://stackoverflow.com/questions/523703/is-my-understanding-of-php-sessions-correct) – Gumbo

Antwort

28

PHP 2 Dinge tun:

  • Es werden alle Links umschreiben einen zusätzlichen GET-Parameter zu übergeben, in der Regel PHPSESSID aber dies kann durch Einstellung session.name in php geändert werden. ini
  • Es wird eine versteckte Eingabe mit dem gleichen Namen nach allen <form> öffnenden Tags hinzufügen.

Beachten Sie, dass dies eine gefährliche Sache zu tun ist, denn jeder, der Sie z.B. Kopieren/Einfügen einer URL, die einen PHPSESSID-Parameter enthält, ist in der Lage, Ihre Anmeldesitzung auf der Website zu teilen - der Webserver hat keine einfache Möglichkeit zu sagen, dass Sie sich von der Person, an die Sie den Link gesendet haben, unterscheiden ...

+2

Danke. Genau das wollte ich wissen. Scheint ironisch, dass Cookies möglicherweise deaktiviert werden, um die Sicherheit auf dem Client zu erhöhen, aber diese Aktion verringert die Sicherheit auf dem Server. – cjakeman

0

PHP eigenes Sitzungsmodul unterstützt das Abrufen der Sitzungs-ID von GET- und POST-Daten (neben Cookies). Sie können http://uk.php.net/manual/en/session.configuration.php#ini.session.use-trans-sid und http://uk.php.net/manual/en/session.configuration.php#ini.url-rewriter.tags verwenden, damit PHP die Weiterleitung der ID übernimmt. Beachten Sie jedoch, dass besonders wenn Sie GET verwenden, um die ID zu transportieren, es wahrscheinlicher ist, dass einige Ihrer Benutzer ihre (gültige) Sitzungs-ID versehentlich vergeben.

Der zugrunde liegende Mechanismus ist egal wie die Session-ID wurde vom Client an den Server transportiert. Solange Sie den "richtigen" Wert an session_id() übergeben, wird es funktionieren - auch wenn Sie etwas so komisch (dumm?) Als Missbrauch der Etag-Header als Vehikel für die Session-ID ;-)

0

Sessions arbeiten Sie, indem Sie für jeden Besucher eine eindeutige ID (UID) erstellen und Variablen basierend auf dieser UID speichern. Die UID wird entweder (1) in einem Cookie gespeichert oder (2) wird in der URL propagiert.

Verwandte Themen