Aktueller Standort: Startseite> Neueste Artikel> Wie stelle ich Sitzungsdaten mithilfe der unverzündeten Funktion in PHP wieder her? Beispiel Erklärung

Wie stelle ich Sitzungsdaten mithilfe der unverzündeten Funktion in PHP wieder her? Beispiel Erklärung

gitbox 2025-09-30

1. Wie die Sitzung funktioniert

PHP Session speichert Benutzerdaten auf dem Server mithilfe einer eindeutigen Sitzungs -ID. Jedes Mal, wenn ein Benutzer eine Anfrage stellt, sucht PHP nach der Sitzungs -ID und lädt die entsprechenden Sitzungsdaten. Die Daten werden normalerweise über die Hyperglobal -Variable $ _Session zugegriffen.

PHP verwendet die Serialize -Funktion automatisch intern, um Daten wie Objekte oder Arrays in Zeichenfolgespeicher umzuwandeln, und stellt sie mithilfe der nichtserialisierenden Funktion in den ursprünglichen Datentyp wieder her.

Manchmal möchten wir jedoch direkt auf diese serialisierten Daten zugreifen oder sie manuell verarbeiten, und die unverzündete Funktion wird besonders wichtig.


2. Überblick über die nieserialisierende Funktion

Die unverzündete Funktion wird verwendet, um serialisierte Zeichenfolgen in PHP -Variablen umzuwandeln.

 <span><span><span class="hljs-keyword">mixed</span></span><span> </span><span><span class="hljs-title function_ invoke__">unserialize</span></span><span> ( </span><span><span class="hljs-keyword">string</span></span><span> </span><span><span class="hljs-variable">$data</span></span><span> [, </span><span><span class="hljs-keyword">array</span></span><span> </span><span><span class="hljs-variable">$options</span></span><span> = [] ] )
</span></span>

Parameterbeschreibung:

  • $ Daten : Die Zeichenfolge zu Deserialize.

  • $ Optionen : Optionaler Parameter, der eine zusätzliche Deserialisierungsregelung bietet (Php 7+ -Unterstützung). Beispielsweise kann eine Klasse, die eine Deserialisierung ermöglicht, angegeben werden.

Rückgabewert:

  • Gibt die von der Deserialized Variable bei Erfolg zurück und gibt beim Versagen falsch zurück.


3. Beispiel: Sitzungsdaten manuell serialisieren und deserialisieren

Schritt 1: Simulation der Sitzungsdatenspeicherung

Angenommen, wir haben ein Benutzerobjekt, das einige grundlegende Benutzerinformationen enthält. Wir werden das Objekt manuell serialisieren und in der Sitzung speichern.

 <span><span><span class="hljs-title function_ invoke__">session_start</span></span><span>();

</span><span><span class="hljs-comment">// Erstellen Sie ein Benutzerobjekt</span></span><span>
</span><span><span class="hljs-class"><span class="hljs-keyword">class</span></span></span><span> </span><span><span class="hljs-title">User</span></span><span> {
    </span><span><span class="hljs-keyword">public</span></span><span> </span><span><span class="hljs-variable">$name</span></span><span>;
    </span><span><span class="hljs-keyword">public</span></span><span> </span><span><span class="hljs-variable">$email</span></span><span>;

    </span><span><span class="hljs-keyword">public</span></span><span> </span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span> </span><span><span class="hljs-title">__construct</span></span><span>(</span><span><span class="hljs-params"><span class="hljs-variable">$name</span></span></span><span>, </span><span><span class="hljs-variable">$email</span></span><span>) {
        </span><span><span class="hljs-variable language_">$this</span></span><span>-&gt;name = </span><span><span class="hljs-variable">$name</span></span><span>;
        </span><span><span class="hljs-variable language_">$this</span></span><span>-&gt;email = </span><span><span class="hljs-variable">$email</span></span><span>;
    }
}

</span><span><span class="hljs-comment">// Benutzerobjekte instanziieren</span></span><span>
</span><span><span class="hljs-variable">$user</span></span><span> = </span><span><span class="hljs-keyword">new</span></span><span> </span><span><span class="hljs-title class_">User</span></span><span>(</span><span><span class="hljs-string">'John Doe'</span></span><span>, </span><span><span class="hljs-string">'[email protected]'</span></span><span>);

</span><span><span class="hljs-comment">// Serialisieren Sie das Benutzerobjekt und speichern Sie es session</span></span><span>
</span><span><span class="hljs-variable">$_SESSION</span></span><span>[</span><span><span class="hljs-string">'user_data'</span></span><span>] = </span><span><span class="hljs-title function_ invoke__">serialize</span></span><span>(</span><span><span class="hljs-variable">$user</span></span><span>);
</span></span>

Im obigen Code erstellen wir eine Benutzerklasse und serialisieren ein Benutzerobjekt John Doe und speichern sie in $ _Session ['user_data'] .

Schritt 2: Sitzungsdaten wiederherstellen (Deserialize)

Sobald die Daten in der Sitzung gespeichert sind, können wir sie in nachfolgenden Anfragen wiederherstellen. Durch die unverzündete Funktion können wir die in der Sitzung gespeicherten serialisierten Daten in das ursprüngliche Objektformular wiederherstellen.

 <span><span><span class="hljs-title function_ invoke__">session_start</span></span><span>();

</span><span><span class="hljs-comment">// prüfen session Gibt es eine 'user_data' Daten</span></span><span>
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-keyword">isset</span></span><span>(</span><span><span class="hljs-variable">$_SESSION</span></span><span>[</span><span><span class="hljs-string">'user_data'</span></span><span>])) {
    </span><span><span class="hljs-comment">// Deserialisierung session Daten</span></span><span>
    </span><span><span class="hljs-variable">$user</span></span><span> = </span><span><span class="hljs-title function_ invoke__">unserialize</span></span><span>(</span><span><span class="hljs-variable">$_SESSION</span></span><span>[</span><span><span class="hljs-string">'user_data'</span></span><span>]);

    </span><span><span class="hljs-comment">// Benutzerinformationen ausgeben</span></span><span>
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">'Name: '</span></span><span> . </span><span><span class="hljs-variable">$user</span></span><span>-&gt;name . </span><span><span class="hljs-string">'&lt;br&gt;'</span></span><span>;
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">'Email: '</span></span><span> . </span><span><span class="hljs-variable">$user</span></span><span>-&gt;email . </span><span><span class="hljs-string">'&lt;br&gt;'</span></span><span>;
} </span><span><span class="hljs-keyword">else</span></span><span> {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">'No user data found in session.'</span></span><span>;
}
</span></span>

In diesem Code prüfen wir zunächst, ob $ _session ['user_data'] vorhanden ist. Wenn es vorhanden ist, verwenden wir die unserialisierende Funktion, um sie dem Benutzerobjekt wiederherzustellen und dann die Eigenschaften dieses Objekts auszugeben.


4. Notizen zur Verwendung der nieserialisierenden Funktion

Sicherheitsprobleme

Bei der Verwendung der nieserialisierenden Funktion muss besondere Aufmerksamkeit auf Sicherheitsfragen geschenkt werden. Insbesondere bei der Deserialisierung von Daten aus nicht vertrauenswürdigen Quellen kann dies zu Objektinjektionsangriffen führen. Dies könnte es einem Angreifer ermöglichen, gefährliche Operationen auszuführen, indem bösartige serialisierte Daten errichtet werden. Daher wird empfohlen, Sicherheitsmaßnahmen hinzuzufügen, um solche Probleme bei der Verwendung von nieserialisiert zu vermeiden.

In PHP 7+ können Deserialisierte Klassen eingeschränkt werden, indem die Option "ABGETAUSE_KLASSEN) festgelegt wird. Beispielsweise kann die Einschränkung nur die Benutzerklassen deserialisieren:

 <span><span><span class="hljs-variable">$options</span></span><span> = [</span><span><span class="hljs-string">'allowed_classes'</span></span><span> =&gt; [</span><span><span class="hljs-string">'User'</span></span><span>]];
</span><span><span class="hljs-variable">$user</span></span><span> = </span><span><span class="hljs-title function_ invoke__">unserialize</span></span><span>(</span><span><span class="hljs-variable">$_SESSION</span></span><span>[</span><span><span class="hljs-string">'user_data'</span></span><span>], </span><span><span class="hljs-variable">$options</span></span><span>);
</span></span>

Auf diese Weise können nur die Objekte der Benutzerklasse deserialisiert werden, während andere Klassen blockiert werden.

Kompatibilitätsprobleme während der Deserialisierung

Esserialisierung kann Kompatibilitätsprobleme in der Cross-Version- oder Cross-Server-PHP-Umgebung auftreten. Wenn sich beispielsweise eine Klasse in einer anderen Version ändert, kann die Deserialisierung fehlschlagen. Um dieses Problem zu vermeiden, können Entwickler JSON_CODE und JSON_DECODE als Alternativen verwenden, insbesondere wenn einfache Datenstrukturen beteiligt sind.