Chris: unserialize fremde session

Coucou

Ich komme nicht weiter mit einem Problem, dass ich mir nicht erklären kann. Daher schlaue Köpfe des Internets wisst ihr weiter?:

if(is_dir(session_save_path())) {

foreach(scandir(session_save_path()) as $entry)
  if($entry != '.' && $entry != '..' && $entry != '.svn')
  {
    $arrSessionFile = explode("_", $entry);
    if($arrSessionFile[0]=="sess" && $arrSessionFile[1] != session_id())
    {
      $fp = fopen(session_save_path()."/".$entry, "r");
      $content = fread($fp, filesize(session_save_path()."/".$entry));
      fclose($fp);
      $arrContent = unserialize($content);
      print_r($arrContent);
    }
  }
}

Prinizip ist einfach: Ich lese alle Sessionfiles im php/session Verzeichnis aus und unserialize() den Inhalt der fremden Session.

Leider funktioniert das unserializen nicht! Die Werte in der Session sind mehrdimensional verschachtelte Arrays und die Session ist zwischen 50KB und 200KB gross. Kann es sein, dass unserialize an seine Grenzen stösst?

$arrContent ist leider kein Array und ich kann nicht auf die Werte der fremden Session zugreifen.

Kann / Muss ich dies anders lösen, oder gibt es vielleicht noch einen Trick den ich noch nicht kenne?

Besten Dank
Chris

  1. Hello,

    Prinizip ist einfach: Ich lese alle Sessionfiles im php/session Verzeichnis aus und unserialize() den Inhalt der fremden Session.

    *dudu*

    Benutz doch einfach "Session_Start(fremde_sessionnummer)" und schau ins Array $_SESSION hinein.
    Wenn Du fertig bist, rufst du "session_write_close() auf. Darfst natürlich in $_SESSION nichts ändern, sonst ist das in der Session-Datei auch geändert hinterher.

    Die Sessiondatei, die sich auf diese Weise im Zugriff befindet, ist für andere Zugriffe gesperrt.

    Aber warum machst Du das? Ich hoffe, nicht zum Sessionentführen!
    Erzähl mal, vielleicht ist Dein Konzept auch nicht optimal.

    Ein harzliches Glückauf

    Tom vom Berg

    --
    Nur selber lernen macht schlau
    http://bergpost.annerschbarrich.de
    1. Hmmm, wusste nicht, dass man das kann mit "Session_Start (fremde_sessionnummer)". Glaube aber nicht, dass es funktioniert, weil der andere User ist ja auch noch aktiv und muss jederzeit in die Session schreiben können.

      Also es ist eine webbasierte Applikation zum Starten von verschiedenen Tests. Diese Applikation kann von verschiedenen Benutzern gleichzeitig verwendet werden. User A, B, C führen Tests aus. User A möchte sehen welche Tests noch ausgeführt werden, der aktuelle Status der Tests wird jeweils in der Session des ausführenden Users gespeichert. Ich lese also den Status meiner eigenen Tests und den Status der Tests der anderen User aus und dieser ist in Sessions gespeichert und wird fortwährend aktualisiert.

      Hoffe es ist verständlich?

      Grundsätzlich bin ich nicht begeistert von Applikationen die stark auf Sessions aufbauen und ich werde sie vielleicht auch später mit DB Anbindung lösen, aber für den Moment muss es noch so funktionieren.

      Danke für die Hilfe

      Hello,

      Prinizip ist einfach: Ich lese alle Sessionfiles im php/session Verzeichnis aus und unserialize() den Inhalt der fremden Session.

      *dudu*

      Benutz doch einfach "Session_Start(fremde_sessionnummer)" und schau ins Array $_SESSION hinein.
      Wenn Du fertig bist, rufst du "session_write_close() auf. Darfst natürlich in $_SESSION nichts ändern, sonst ist das in der Session-Datei auch geändert hinterher.

      Die Sessiondatei, die sich auf diese Weise im Zugriff befindet, ist für andere Zugriffe gesperrt.

      Aber warum machst Du das? Ich hoffe, nicht zum Sessionentführen!
      Erzähl mal, vielleicht ist Dein Konzept auch nicht optimal.

      Ein harzliches Glückauf

      Tom vom Berg

      1. Grundsätzlich bin ich nicht begeistert von Applikationen die stark auf Sessions aufbauen und ich werde sie vielleicht auch später mit DB Anbindung lösen, aber für den Moment muss es noch so funktionieren.

        Wenn es aktuell keine DB sein soll, warum schreibst du dir nicht den Status der aktuell laufenden Tests in eine separate Datei jeder lesen kann?
        So musst nicht hunderte Dateien unnötig parsen.

        Gruß,
        Andreas

        1. RFZ,

          Jeder Test umfasst relativ viele Steuerdaten unterscheidet sich von Queue, Active und Done, enthält Fehlermeldungen und Forschrittsinformationen und ca. 100 verschiedene Einstellungen zum Test Scenario, sowie 0-100 Verschiedene Tests. Zudem kann es N-Scenarios geben. *schwitz* Also sehr viele Informationen. Diese Infos sind pro User in den Sessions gespeichert und werden aktualisiert.

          Aber ich sehe je länger je mehr, dass dies nicht mehr lange so weiter gehen kann und ich mit der DB Anbindung beginnen muss.

          Weil so könnte ich eine Tabelle mit aktiven Tests machen und eine Spalte für die SessionID die Objekte serialized in die Datenbank speichern, dann würde ein einziger Read und unserialize genügen um die Tests entsprechend anzuzeigen...

          Falls mir trotzden noch jemand sagen könnte warum ich eine fremde Session nicht unserializen kann, sprich keine Werte im Array habe, wäre ich dankbar. Denn im inet fand ich nicht sehr viel schlaues dazu (unserializen fremder sessions)

          1. Hello,

            Falls mir trotzden noch jemand sagen könnte warum ich eine fremde Session nicht unserializen kann, sprich keine Werte im Array habe, wäre ich dankbar. Denn im inet fand ich nicht sehr viel schlaues dazu (unserializen fremder sessions)

            Dazu musst Du nur ein wenig basteln.

            Bau Die eine einfache Session-Datei.
            Bau Dir eine einfache serialized Datei
            vergeleiche beide und stelle fest, welche Basteleei nötig ist, um beide ineinander zu überführen.
            Es sind nur wenige Zeichen Unterschied, eine Klammerung sozusagen :-)

            Ein harzliches Glückauf

            Tom vom Berg

            --
            Nur selber lernen macht schlau
            http://bergpost.annerschbarrich.de
            1. Bau Die eine einfache Session-Datei.
              Bau Dir eine einfache serialized Datei
              vergeleiche beide und stelle fest, welche Basteleei nötig ist, um beide ineinander zu überführen.
              Es sind nur wenige Zeichen Unterschied, eine Klammerung sozusagen :-)

              @Tom: Hmm das verstehe ich nicht ganz dein Prinzip. Ich möchte nicht unbedingt zusätzliche Dateien erstellen.

              SYSTEM|s:8:"TESTV754";userName|s:10:"chrisk";userRealName|s:19:"Christian";
              Ich habe eine fremde Session nun auf ein minimum an Informationen gekürzt. Totzdem funktioniert die unserialize funktion nicht!?

              Es sollte doch nun ein Array haben

              array(
              ['SYSTEM'] => "TESTV754"
              ['userName'] => "chrisk"
              ['userRealName'] => "Christian"
              )

              1. Hi,

                SYSTEM|s:8:"TESTV754";userName|s:10:"chrisk";userRealName|s:19:"Christian";
                Ich habe eine fremde Session nun auf ein minimum an Informationen gekürzt.

                Da hast du zu viel weggekuerzt.

                Totzdem funktioniert die unserialize funktion nicht!?

                Bitte lies in den Tipps fuer Fragende nach, warum "funzt nich" unbrauchbarer Bloedsinn ist.

                Wenn ich unserialize auf obiges loslasse, dann erhalte ich eine Meldung a la

                Notice:  unserialize() [function.unserialize]: Error at offset 0 of 75 bytes in [...]

                Es sollte doch nun ein Array haben

                array(
                ['SYSTEM'] => "TESTV754"
                ['userName'] => "chrisk"
                ['userRealName'] => "Christian"
                )

                Dann nimmst du jetzt mal genau dieses Array, und wendest serialize darauf an. Die Unterschiede zu dem, was du oben gepostet hast, sollten relativ leicht ins Auge fallen.

                MfG ChrisB

                --
                "The Internet: Technological marvel of marvels - but if you don't know *what* you're lookin' for on the Internet, it is nothing but a time-sucking vortex from hell."