2016-07-25 16 views
0

So habe ich endlich einige Sitzungsdaten in der Datenbank gespeichert. Jetzt tritt ein neues Problem auf. Wenn ich die Seite lade, sobald alle Daten gespeichert sind. Wenn ich die Seite neu lade und etwas in die Sitzung schreibe, werden alle Daten, die bereits in der Sitzung sind, durch diese neuen Daten ersetzt. Dies bedeutet, dass bei jeder Ladung alle Daten für neue Daten ersetzt werden. Das gibt mir Probleme, weil ich ein order_id in der Sitzung speichern, wenn order_id in dem session nicht vorhanden ist.Benutzerdefinierte Sitzung save_handler overwerites aktuelle gespeicherte Daten in der Datenbank

Dies ist der Code, der die Daten in die Datenbank schreibt. Und ja heißt es ersetzen in. Aber weil dies ein benutzerdefinierter Handler ist, wie kann ich tatsächlich Daten an diese aktuelle Sitzung anhängen, ohne alles zu erneuern. Auch wie kann ich alte Daten für neue Daten ersetzen, die bereits in der Sitzung vorhanden sind.

Der Code, der das Schreiben in die Datenbank behandelt.

function _write($id, $data) { 

     $access = time(); 
     $id = $this->session_db->real_escape_string($id); 
     $access = $this->session_db->real_escape_string($access); 
     $data = $this->session_db->real_escape_string($data); 
     $sql = "REPLACE INTO sessions VALUES ('$id', '$access', '$data')"; 
     return $this->session_db->query($sql); 
    } 

Gibt es etwas, das ich tun kann, um alle Daten nach session_start() in der Session-Variablen direkt zu setzen, so dass es immer alle Daten hat, und überschreiben die Daten nicht mit einem einzigen Wert, wenn ich etwas tun:

$_SESSION['LAST_ACTIVITY'] = time(); ? 

EDIT: auch wenn ich versuche, um die Sitzung echo direkt nach dem session_start(); Es gibt dort me error

Warning: session_start(): Failed to decode session object. Session has been destroyed in /var/www/vhosts/url/httpdocs/index.php on line 13 

Ist mit der serialisierten Zeichenfolge etwas nicht in Ordnung, das ich nicht verstehe, warum es mir diesen Fehler gibt?

Vielen Dank im Voraus, einige Hilfe wird geschätzt.

Antwort

0

Ok, jetzt funktioniert alles. Es ist mir peinlich, dass ich gesagt habe, was das Problem ist. Also ok das Problem und die Lösung.

Das Problem war, dass die Sitzung serialisierte Daten viel zu lang für ein normales Textfeld in der Datenbank war. Meine Zeichenkette war über 500.000 Zeichen lang, reguläres Textfeld in der Datenbank unterstützt bis zu 65.000 Zeichen.

Also habe ich das Feld von "TEXT" zu "LONGTEXT" geändert jetzt hat es genug Platz, um die Zeichenfolge zu speichern. Und jetzt funktioniert alles richtig.

Vielen Dank für Ihre Zeit bis jetzt.