Ankündigung

Einklappen
Keine Ankündigung bisher.

memcache sessionhandler, read() Frage...

Einklappen

Neue Werbung 2019

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

  • memcache sessionhandler, read() Frage...

    Hallöchen,

    hatte mal eine Klasse gefunden zum Einsatz als SessionHandlerInterface...
    Hier verwundert mich die read()-Funktion einwenig und wollte gern wissen ob es Gründe gibt für die Vorgehensweise, denn eigentlich geht es kürzer und Server-schonender...

    Originalfunktion:
    PHP-Code:
    public function read($id){
        
    $tmp $_SESSION;
        
    $_SESSION json_decode($this->memcache->get($this->pref.$id), true);
        if(!empty(
    $_SESSION) && $_SESSION != null){
            
    $new_data session_encode();
            
    $_SESSION $tmp;
            return 
    $new_data;
        }else{
            return 
    '';
        }

    Kurze-variante:
    PHP-Code:
    public function read($id){
        
    $_SESSION json_decode($this->memcache->get($this->pref.$id), true);
        if(
    $_SESSION !== null){
            return 
    session_encode();
        }else{
            return 
    '';
        }

    Hatte erst gedacht das evtl. die Session-Datei in $tmp geladen wird aber dem ist nicht so wäre ja auch Käse weil dadurch würde ja der Geschwindigkeitsvorteil verloren gehen wenn erst die Datei und dann ausm Arbeitsspeicher geladen würde.
    Es wäre aber nicht ganz uninteressant dies evtl. als Fallback einbauen zu können. Zur Zeit habe ich es so das die Sitzungen nur sehr kurz (15Minuten) in Memcache gespeichert werden, außer der User nutzt die Seite aktiv dann geht der 15Minuten-Countdown immer von vorne los (es gibt natürlich diverse Fallbacks die das surfen ungehindert verlängern).
    Sind die 15 Minuten einmal ohne Aktivitäten vorüber erhält der User eine frische Session (als frisch eingeloggt), somit sind natürlich etwaige Prozesse futsch (könnte man natürlich in die DB auslagern) aber daher wäre vllt. das Session-file das länger aufm server existiert nicht uninteressant (es existiert ja ohne hin schon).


    MfG: Paykoman

  • #2
    Zitat von Paykoman Beitrag anzeigen
    Hatte erst gedacht das evtl. die Session-Datei in $tmp geladen wird aber dem ist nicht so wäre ja auch Käse weil dadurch würde ja der Geschwindigkeitsvorteil verloren gehen wenn erst die Datei und dann ausm Arbeitsspeicher geladen würde.
    Eine Variablenzuweisung verändert so gut wie nichts am Speicherverbrauch.

    Kommentar


    • #3
      Zitat von hellbringer Beitrag anzeigen

      Eine Variablenzuweisung verändert so gut wie nichts am Speicherverbrauch.
      Nun das war nicht meine Vermutung oder Frage :P
      Die Frage war, warum dort $tmp = $_SESSION; gemacht wird, denn ein var_dump($_SESSION); vor der Zeile gibt immer ein leeres Array zurück.
      Und warum dann $tmp in $_SESSION rein gepackt wird, ist doch eh immer ein leeres array...

      Vermutet hatte ich das evtl. die Datei-Session enthalten wäre und dann mehr oder weniger von memcache ersetzt wird, was ich aber wieder ausschloss weil das bedeuten würde man würde erst die Datei von der Disk laden und dann die Daten ausm Arbeitsspeicher (Geschwindigkeitsvorteil wäre dahin, von Speicherverbrauch war keine Rede..).

      Darum die originalfunktion und meine Funktion im Vergleich, warum sollte man nicht meine Variante nutzen?

      Ich denke mal PHP füllt $_SESSION nach dem return mit dem zurückgegebenen Wert, denn oben wird die $_SESSION mit = []; gesetzt und das array aus memcache wird zurück gegeben (landet also nach dem return trotzdem in $_SESSION).

      Hat es Nachteile, wenn es wie ich es gemacht habe, gemacht wird? Also direkt das Array aus Memcache und einfach nur noch session_decode() zurückgeben?
      Funktionieren tut es einwandfrei, bisher...

      Kommentar


      • #4
        Zitat von Paykoman Beitrag anzeigen
        Nun das war nicht meine Vermutung oder Frage :P
        Die Frage war, warum dort $tmp = $_SESSION; gemacht wird, denn ein var_dump($_SESSION); vor der Zeile gibt immer ein leeres Array zurück.
        Keine Ahnung, das musst du den Programmierer fragen oder Doku und Code studieren.

        Zitat von Paykoman Beitrag anzeigen
        Vermutet hatte ich das evtl. die Datei-Session enthalten wäre und dann mehr oder weniger von memcache ersetzt wird, was ich aber wieder ausschloss weil das bedeuten würde man würde erst die Datei von der Disk laden und dann die Daten ausm Arbeitsspeicher (Geschwindigkeitsvorteil wäre dahin, von Speicherverbrauch war keine Rede..).
        Was heißt "Datei-Session"? Weißt du überhaupt was ein Session-Handler ist? Wenn du einen eigenen einbindest, ersetzt du den PHP-eigenen Session-Handler, der auf Dateibasis funktioniert.

        Kommentar


        • #5
          Memcache kommt aus einer Zeit da es noch keine SSD Laufwerke gab, und um die Datenbanklast zu minimieren, das spielt heute alles keine Rolle mehr.
          siehe Memcache


          Kommentar


          • #6
            Damit war die Datei gemeint in der nun mal die Session gespeichert wird (/var/lib/php5/sessions), und ja ich weis was ein Sesssion-Händler ist sonst hätte ich meine Vermutung ja nicht selber wiederlegen können oder?
            Warum immer nur auf das Negative fokussieren?
            Und ja (zu mindestens dieser Server hier) erstellt trotz der Einbindung des Handlers für Memcache eine entsprechende Datei (deshalb erst diese Vermutung).

            Ich wollte auch nicht ergründen was sich der Jenige gedacht hat, das kann nur er beantworten... Aber erfahrene Programmierer hatten sicher schon mal mit dieser Thematik zu tun und können sagen ja das ist unter Umständen aus diesen und jenen Gründen so gemacht. Ich denke der Code ist jetzt nicht so komplex etc. das man da nciht mal kurz sagen kann aus welchen Gründen man das so machen muss oder eben halt das Gegenteil, sprich, macht keinen Sinn aus den von dir erläuterten Gründen...

            Kleines Update, wie ich gerade feststellt, funktioniert selbst diese Variante:
            PHP-Code:
            public function read($id){
                
            $_SESSION json_decode($this->memcache->get($this->pref.$id), true);
                
            // if($_SESSION === null){ $_SESSION = []; }
                
            return '';

            Kommentar


            • #7
              Verwende die Session so wie im Handbuch angegeben.
              Wir können nicht wissen, was sich der Ersteller dabei gedacht hat noch wissen wir unter welchen Umständen er diesen Weg gegangen ist.
              Nicht jeder Codefetzen den man im Netz findet ist sinnig.

              Was willst du von uns hören, dass das Unsinn ist - Prima, ist Unsinn.

              Kommentar


              • #8
                Zitat von Paykoman Beitrag anzeigen
                Damit war die Datei gemeint in der nun mal die Session gespeichert wird (/var/lib/php5/sessions), und ja ich weis was ein Sesssion-Händler ist sonst hätte ich meine Vermutung ja nicht selber wiederlegen können oder?
                Entweder es wird der Session-Handler für Dateien oder der Session-Handler für Memcache verwenden. Ein "wird beides verwendet" geht technisch nicht. Also wie kommst du auf die Idee, dass ein Session-Handler für Memcache eine Datei speichert? Ich seh in dem Code nirgendwo ein fwrite() oder file_put_contents().

                Zitat von Paykoman Beitrag anzeigen
                Und ja (zu mindestens dieser Server hier) erstellt trotz der Einbindung des Handlers für Memcache eine entsprechende Datei (deshalb erst diese Vermutung).
                Dann läuft da irgendwas falsch und der Server ist falsch konfiguriert oder der Code ist fehlerhaft.

                Kommentar

                Lädt...
                X