2017-02-20 2 views
0

Ich benutze PHP-Session-Handler, um dauerhafte Sitzung auf meiner Site zu implementieren. Das Problem ist, dass ich irgendwann den Benutzerschlüssel in eine andere MySQL-Tabelle einfügen muss und ich weiß nicht, wie ich diese Informationen aus dem Code abrufen kann.Wie kann ich bestimmte Informationen aus dem persistenten Session-Handler mit PHP abrufen?

Zum Beispiel der Datenzeile in meine Session-Tabelle ist:

active|i:1487613760;user_username|s:20:"[email protected]";user_key|s:8:"a5186adc";authenticated|b:1;user_name|s:12:"victor";user_email|s:20:"[email protected]";remember|b:1; 

und ich würde gerne wissen, ob es eine einfache Möglichkeit ist es, das user_key Variable zu erhalten.

Sorry, wenn es ein bisschen verwirrend war.

+0

, das ein seltsames serialize Format scheint, wie sie Ihre Session-Handler es Serialisierung ist? – DevDonkey

Antwort

0

Die erste Option besteht darin, diese Zeichenfolge zu deserialisieren. http://php.net/manual/en/function.unserialize.php

Zweite Option können Sie preg_match Funktion mit dem nächsten Muster verwenden:

preg_match('/user_key\|s:\d+:"([a-zA-Z0-9]+)"/', $string, $match); 
+0

Danke für Ihre Hilfe 4EACH. Das Problem ist, dass ich nicht weiß, wie man diese bestimmte Reihe bekommt, sobald es viele Sitzungen gleichzeitig gibt. –

+0

Welche Informationen zur Eindeutigkeit haben Sie beim Benutzer? – 4EACH

+0

Ich brauche den user_key, damit ich in eine andere mysql-Tabelle einfügen kann. Es gibt eine Methode "lesen", um die Informationen mit dem Handler zu lesen ... –

0

Ich kann nicht überall etwas finden, das Format der serialisierten String, es ist nicht etwas, was ich vorher gesehen habe zu behandeln.

jedoch here eine schnelle Funktion es in ein Array drehen (es kann nicht übermäßig elegant sein, aber ich hatte nur 1 Kaffee):

$string = 'active|i:1487613760;user_username|s:20:"[email protected]";user_key|s:8:"a5186adc";authenticated|b:1;user_name|s:12:"victor";user_email|s:20:"[email protected]";remember|b:1; 
'; 

$array = deserializeSessionString($string); 

echo $array['user_key']; 

// deserialize a session string into an array 
function deserializeSessionString($string) 
{ 
    $output = []; 
    // separate the key-value pairs and iterate 
    foreach(explode(';', $string) as $p) { 
     // separate the identifier with the contents 
     $bits = explode('|', $p); 

     // conditionally store in the correct format. 
     if(isset($bits[1])) { 
      $test = explode(':', $bits[1]); 
      switch($test[0]) { 
       // int 
       case 'i': 
        $output[$bits[0]] = $test[1]; 
        break; 
       case 's': 

        // string 
        // ignore test[1], we dont care about it 
        $output[$bits[0]] = $test[2]; 
        break; 

       case 'b': 
        // boolean 
        $output[$bits[0]] = ($test[1] == 1 ? true : false); 
        break; 
      } 
     } 

    } 

    return $output; 
} 

dann sollten Sie in der Lage sein, was Sie für den Zugriff auf muß nur mit dem Schlüssel:

echo $array['user_key']; 

heres an example

+0

Vielen Dank für Ihre Antwort DevMonkey ... Es kann hilfreich sein, wenn ich die Sitzungs-ID oder einen "Index" zu der bestimmten Zeile erhalten kann. Ich weiß noch nicht, wenn Sitzungshandler mir mit dem Code selbst helfen kann, aber in der Zwischenzeit ich setze und user_key auf jeder Seite auf der Variable _SESSION ... erhalten Nochmals vielen Dank. –

Verwandte Themen