2 Stimmen

Das echte SESSION-Objekt von PHP

EDIT: (AKTUALISIERT)

Vielleicht war meine Frage nicht deutlich genug. Okay, sagen wir es mal so:

$arr["a"] = 10; 
var_dump($arr);
$arr["b"] =& $arr["a"];
var_dump($arr);

der erste var_dump liefert:

array
  'a' => int 10

Während die zweite zurückkehrt:

array
  'a' => &int 10
  'b' => &int 10

Wenn ich unset($arr["a"]) wird er zurückkehren:

array
  'b' => int 10

Wenn 2 oder mehr Variablen auf denselben Inhalt "zeigen", zeigt var_dump den Verweis mit einem kaufmännischen Und-Zeichen (&) an.

Im Fall von $_SESSION, sogar mit register_long_arrays = Aus $_SESSION zeigt immer noch einen Verweis an. Es ist also offensichtlich, dass auch die andere Variable auf denselben Inhalt verweist.

Mit anderen Worten, wenn ich unset($_SESSION) gibt es immer noch irgendwo eine andere Variable, die mit verknüpft werden kann. In dem obigen Beispiel, wenn ich unset($arr["a"]) Ich kann diesen Inhalt immer noch wiederherstellen, wenn ich einen Link erstelle, etwa so: $arr["z"] =& $arr["b"] .

Meine ursprüngliche Frage war also, ob jemand weiß, WELCHE diese andere Variable ist? Es ist sehr wahrscheinlich, dass eine solche Variable nicht existiert... aber ich habe mich gefragt, warum in PHP diese Referenz angezeigt wird.

Gracias


(Originalfrage:)

Wenn Sie eine Sitzung in PHP erstellen, zum Beispiel:

session_start();
$_SESSION["name"] = "my name";

und geben Sie die GLOBAL-Variablen mit aus:

var_dump($GLOBALS);

werden Sie so etwas sehen wie:

  'HTTP_SESSION_VARS' => &
    array
      'name' => string 'my name' (length=7)
  '_SESSION' => &
    array
      'name' => string 'my name' (length=7)
  'HTTP_SERVER_VARS' => 
    array
      ...

Wie Sie sehen können, sind die beiden Variablen $GLOBAL[HTTP_SESSION_VARS] und $_SESSION Referenzen auf den Inhalt eines anderen Objekts... Weiß jemand, welches dieses Objekt ist?

Theoretisch müsste es möglich sein, auf diese Inhalte zuzugreifen, wenn ich beide Variablen entferne. Inhalt... irgendein Hinweis?

Ich danke Ihnen!

5voto

Pascal MARTIN Punkte 384469

$HTTP_SESSION_VARS ist der alte, veraltete Name für $_SESSION -- Sie sollten das nicht mehr verwenden.

Diese $HTTP_*_VARS Variablen müssen nicht unbedingt gesetzt werden: Sie werden nur gesetzt, wenn die register_long_arrays Konfigurationsrichtlinie aktiviert ist - und bei neueren PHP-Versionen (d.h. PHP 5.3) wurde sie veraltet.

Auf meinem Server, auf dem PHP 5.3.2 läuft, ist der Teil des Codes, den Sie :

session_start();
$_SESSION["name"] = "my name";
var_dump($GLOBALS);

Nur Ausgänge (nach einigen Aktualisierungen, was das Vorhandensein der PHPSESSID Keks) :

array
  'GLOBALS' => 
    &array
  '_POST' => 
    array
      empty
  '_GET' => 
    array
      empty
  '_COOKIE' => 
    array
      'PHPSESSID' => string 'fnlujfapqg7kdk1ocve6ndb282' (length=26)
  '_FILES' => 
    array
      empty
  '_SESSION' => &
    array
      'name' => string 'my name' (length=7)

Keine Spur von irgendwelchen $HTTP_*_VARS Variable : die register_long_arrays Konfigurationsrichtlinie deaktiviert ist.

0voto

tangrs Punkte 9244

Dient HTTP_SESSION_VARS nicht der Abwärtskompatibilität?

0voto

aefxx Punkte 23877

Nun, in PHP 5 $HTTP_SESSION_VARS wird nur aus Kompatibilitätsgründen beibehalten. Es wird dringend empfohlen, Folgendes zu verwenden $_SESSION stattdessen. Aus dem PHP-Handbuch:

$HTTP_SESSION_VARS enthält die gleichen Ausgangsinformationen, ist aber keine Superglobale. (Beachten Sie > dass $HTTP_SESSION_VARS und $_SESSION unterschiedliche Variablen sind und dass PHP sie als solche behandelt. sie als solche behandelt)

EDIT
Sie sagen, Sie "wissen das schon"!? Wie lautet dann Ihre Frage? $_SESSION ist schließlich KEIN Objekt, sondern ein ARRAY, eine superglobale Variable. Keine Methoden, keine Mitglieder. Sie können auf die Werte zugreifen wie auf jedes andere Array: $_SESSION['key'] .

Sie könnten Ihre eigene Session-Klasse schreiben, die die PHP-Session-Verwaltung umgeht. Verwenden Sie die session_set_save_handler Methode, um die eingebaute Sitzungsverwaltung zu umgehen und Ihre eigene Logik zu implementieren.

Herzliche Grüße.

0voto

animuson Punkte 52328

Es handelt sich um ein Array von Daten, die in der Sitzungsdatei gespeichert werden, einer temporären Datei, die auf dem Server gespeichert ist. Wie beide zeigen, handelt es sich um ein Array, es gibt kein "Session"-Objekt. Diese Werte werden ausgefüllt, wenn Sie die Funktion session_start die grundsätzlich die Daten aus der Datei auf der Grundlage des PHPSESSID-Cookies für diesen Benutzer lädt.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X