PHP leere Session-Dateien vom Login-System generiert

9

Vor kurzem habe ich festgestellt, dass viele leere Sitzungen erstellt werden, ich bin mir nicht sicher warum, obwohl ich glaube, dass ich alles richtig mache.

Wenn wir eine Sitzung erstellen, wenn sich ein Benutzer entweder anmeldet oder registriert , prüfen wir, ob ein Benutzer mit einem isset($_COOKIE['auth']) angemeldet ist, zu dem er gehört die während der Anmeldung erstellte Sitzung oder Registrierung.

Wenn dieser Cookie vorhanden ist, starten wir eine Sitzung, dies hilft uns zu vermeiden, Tausende von Sitzungen für nicht registrierte Benutzer zu starten und eine große Anzahl von Sitzungsdateien zu erstellen.

Sitzungseinstellungen:

PHP-Datei

%Vor%

php.ini

%Vor%

Anmeldesitzung erstellen (Bei erfolgreicher Anmeldung)

%Vor%

Überprüfen, ob eine Sitzung fortgesetzt werden soll

Wir prüfen dann, ob eine Sitzung für einen Benutzer gestartet werden soll, abhängig davon, ob der auth Sitzungscookie gesetzt ist.

Es wird nur gesetzt, wenn der Benutzer sich vorher registriert oder angemeldet hat:

%Vor%

Überprüfen Sie, ob der Benutzer angemeldet ist

Um zu überprüfen, ob ein Benutzer angemeldet ist, verwenden wir eine Funktion:

%Vor%

Abmelden

%Vor%

Aus irgendeinem Grund bekomme ich viele leere (Dateigröße 0) Sitzungsdateien im Sitzungsordner.

Woher kommen diese?

Erstellt session_regenerate_id(true) eine neue Sitzungsdatei und lässt die alte Sitzungsdatei leer? Das ist der einzige Grund, den ich für die leeren Sitzungsdateien denken kann?

    
Dan 26.11.2013, 00:58
quelle

4 Antworten

2
%Vor%

Weitere Informationen finden Sie php-Handbuch .

session_regenerate_id() ersetzt die aktuelle Sitzungs-ID durch eine neue und behält die aktuellen Sitzungsinformationen bei.

Die alte Sitzungsdatei wird beibehalten, und jedes Mal, wenn session_register_id() ausgeführt wird, wird eine neue Sitzungsdatei generiert. session_register_id() erstellt eine neue Sitzung mit einer neuen session_id, behält aber die alten Sitzungsinformationen bei, also behält Ihre session_register_id() die alten Sitzungsdateien nach dem Aktualisieren der Informationen in der neuen Sitzungsdatei auf null.

    
Hawk 02.06.2014 09:51
quelle
1
  

Erstellt session_regenerate_id (true) eine neue Sitzungsdatei und geht   die alte Sitzungsdatei leer? Das ist der einzige Grund, den ich mir vorstellen kann   die leeren Sitzungsdateien?

Der Aufruf von session_regenerate_id(true) versucht, die Sitzungsdatei zu löschen, gibt aber false zurück, wenn dies nicht der Fall ist (siehe entsprechenden php-Quellcode unten). Aus diesem Grund schlage ich vor, dass Sie überprüfen, ob Ihre Sitzungsfunktionen erfolgreich ausgeführt werden, d. H.

%Vor%

Überprüfen Sie auch, wie oft Ihr Garbage Collector ausgeführt wird. Vielleicht läuft es mit einer sehr geringen Wahrscheinlichkeit und Sie sehen verwaisten Sitzungen ansammeln. Die folgenden Einstellungen führen den Garbage Collector bei jeder Ausführung von php mit einer Wahrscheinlichkeit von 1/100 (1%) aus. Versuchen Sie, alle Waisen zu löschen, indem Sie beide Werte für einen einzelnen Lauf auf 1 setzen und dann die Werte wie unten auf 1/100 setzen.

%Vor%

Abschließend läuft Ihre Abmelde-Methode den Session-Cookie beim Schließen des Browsers ab. Versuchen Sie es stattdessen sofort ablaufen

%Vor%

PHP-Quelle für session_regenerate_id

Ссылка

Beachten Sie den Aufruf von PS(mod)->s_destroy(&PS(mod_data), PS(id) TSRMLS_CC)

%Vor%

PS_DESTROY_FUNC

Ссылка

Hinweis VCWD_UNLINK ist ein Befehl zum Entfernen der Datei von der Festplatte.

%Vor%     
FuzzyTree 04.06.2014 08:37
quelle
0

Sollte nicht header("Location: $_SERVER[HTTP_REFERER]"); header("Location: $_SERVER['HTTP_REFERER']"); sein? Oder ist das nur etwas Dummes?

BEARBEITEN:

Laut PHP.net sollten Sie den Parameter delete_old_session verwenden. Schauen Sie sich HIER

an     
LisaW 01.06.2014 14:54
quelle
0

Nur meine 2 Cent: Ein Benutzer (egal ob eingeloggt oder nicht) benutzt die Seite während einer bestimmten Zeit, die normalerweise als "Sitzung" bezeichnet wird. Wäre es ein Problem, eine Sitzung immer zu starten und eine Sitzungsvariable beizubehalten, um festzustellen, ob jemand authentifiziert ist. Momentan scheint es, dass Sie versuchen, nur eine Sitzung zu starten, wenn jemand eingeloggt ist, was mehr Overhead bringt als nur eine Sitzung zu starten und eine Variable für das gleiche Verhalten zu überprüfen.

Wenn Sie das Sitzungszeitlimit niedrig halten, wird jemand automatisch ausgeloggt. Abhängig vom Traffic der Website können Sie festlegen, dass der GC häufiger oder seltener antritt. (Siehe: Ссылка )

Wenn die Festplatte ein Engpass für Sitzungen ist (zu viele Empy-Sitzungsdateien usw.), erstellen Sie eine kleine RAM-Disk, auf der Sitzungsinformationen gespeichert werden.

    
Ronald Swets 03.06.2014 11:01
quelle

Tags und Links