Ankündigung

Einklappen
Keine Ankündigung bisher.

PHP Session verschwindet

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • PHP Session verschwindet

    Hallo,

    Ich habe hier das Problem, dass hin und wieder die PHP-Session zu "verschwinden" scheint, d.h. ein Zugriff auf die $_SESSION - Variable liefert ein leeres Array zurück. Dies geschieht, bei ca. 40 Aufrufen pro Tag, etwa 1-2 Mal pro Woche.

    Gelesen habe ich, dass der Wert
    Code:
    session.gc_maxlifetime
    , wenn von einem anderen Script gesetzt, zu unerwartetem Verhalten führen kann. Empfohlen wird, den
    Code:
    session.save_path
    zu ändern. Ich habe allerdings einen eigenen Save Handler registriert (https://symfony.com/doc/current/doct...n_storage.html) und denke nicht, dass das einen Einfluss hätte - da ich eben die Sessions in der Datenbank speichere.

    PHP 7.2 und offenbar ein Debian-Server. Debian scheint seine eigene GC zu haben, ich bin mir nicht sicher, ob es damit etwas zu tun haben könnte.

    Bin ziemlich ratlos, hat jemand so etwas schon erlebt und kann was dazu sagen?

    Danke und Grüße


  • #2
    Symfony hat einen Session Invalidation Mechanismus, welchen man beeinflussen kann.
    Z.b. beim wechseln zwischen Firewallbereichen, oder wenn sich etwas am User Object verändert. Ggf. solltest du dort einmal schauen wie dies bei dir Konfiguriert ist.
    Weiter solltest du die von Symfony angebotenden Methoden nutzen auf die Session zuzugreifen und nicht direkt das $_SESSION Array verwenden.

    https://symfony.com/doc/current/comp...iguration.html
    https://symfony.com/doc/current/session.html

    https://symfony.com/doc/current/secu...om-the-session

    At the end of every request (unless your firewall is stateless), your User object is serialized to the session. At the beginning of the next request, it's deserialized and then passed to your user provider to "refresh" it (e.g. Doctrine queries for a fresh user).

    Then, the two User objects (the original from the session and the refreshed User object) are "compared" to see if they are "equal". By default, the core AbstractToken class compares the return values of the getPassword(), getSalt() and getUsername() methods. If any of these are different, your user will be logged out. This is a security measure to make sure that malicious users can be de-authenticated if core user data changes.

    However, in some cases, this process can cause unexpected authentication problems. If you're having problems authenticating, it could be that you are authenticating successfully, but you immediately lose authentication after the first redirect.

    In that case, review the serialization logic (e.g. SerializableInterface) if you have any, to make sure that all the fields necessary are serialized.

    Kommentar


    • #3
      Danke für die Hinweise. Ich habe den Save Handler installiert in der Hoffnung, eventuelle Probleme im Server-Dateisystem zu umgehen und das Problem damit zu lokalisieren oder sogar zu beheben. Die Ursache liegt also in einer tieferen Schicht als im Handler. Wir haben mittlerweile das Session Timeout hochgesetzt und beobachten nun.

      >Weiter solltest du die von Symfony angebotenden Methoden nutzen auf die Session zuzugreifen und nicht direkt das $_SESSION Array verwenden.

      Grundsätzlich ja. Ich verwende dazu ein eigenes Session-Objekt und nicht das aus dem Symfony-Framework.

      Kommentar

      Lädt...
      X