Dieter: Gültigkeit von Session angeben

Moin, gibt es in PHP die Möglichkeit, die Gültigkeit von Sessions anzugeben.
Dies heißt, wenn ich sie im Ordner beispiel/ registiert habe, dass diese dann auch nur in dem Ordner, bzw. in Unterordner darauf zugeriffen werden kann?
So dass ich in einem anderem Ordner (kein Unterordner) darauf nicht zugreifen kann.

P.S. Am besten wäre eine mit Lösung, die zu möglichst vielen System kompatibel ist.

Mit freundlichen Grüßen
Dieter

  1. hi,

    Moin, gibt es in PHP die Möglichkeit, die Gültigkeit von Sessions anzugeben.
    Dies heißt, wenn ich sie im Ordner beispiel/ registiert habe, dass diese dann auch nur in dem Ordner, bzw. in Unterordner darauf zugeriffen werden kann?
    So dass ich in einem anderem Ordner (kein Unterordner) darauf nicht zugreifen kann.

    du könntest session.cookie_path entsprechend einstellen.
    das wird aber vermutlich bei übergabe der SID per GET nichts nützen.
    da müsstest du dann vermutlich selber überprüfen, "wo" dein script aufgerufen wurde - beispielsweise über $_SERVER['REQUEST_URI'] o.ä.

    gruß,
    wahsaga

    --
    /voodoo.css:
    #GeorgeWBush { position:absolute; bottom:-6ft; }
    1. Hello,

      du könntest session.cookie_path entsprechend einstellen.
      das wird aber vermutlich bei übergabe der SID per GET nichts nützen.
      da müsstest du dann vermutlich selber überprüfen, "wo" dein script aufgerufen wurde - beispielsweise über $_SERVER['REQUEST_URI'] o.ä.

      ich würde hier eher für

      session.save_path

      plädieren.

      Alle Sesseion-Dateien des Verzeichnisses und der tieferen Strukturen, wenn für die nicht extra was festgelegt wurde, landen dann in diesem Verzeichnis. Das muss natürlich für den daemon lesbar , beschreibbar und wenn er auch aufräumen soll (GC), auch browsebar *g* sein.

      Harzliche Grüße aus http://www.annerschbarrich.de

      Tom

      --
      Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
      Nur selber lernen macht schlau
      1. hi,

        ich würde hier eher für
           session.save_path
        plädieren.

        ich wüsste nicht, was das hier nützen sollte.

        wenn ich die frage richtig verstanden habe möchte er, dass die session nur bei aufruf von ressourcen innerhalb bestimmter "pfade" innerhalb des URLs wieder aufgenommen wird, bzw. außerhalb dieser "pfade" nicht erkannt wird.

        session.save_path regelt, wo im dateisystem des servers die sessiondateien von der speicherprozedur abgelegt werden sollen - das hat m.E. mit dem hier gefragten so gut wie gar nichts zu tun.

        gruß,
        wahsaga

        --
        /voodoo.css:
        #GeorgeWBush { position:absolute; bottom:-6ft; }
        1. Hello,

          wenn ich die frage richtig verstanden habe möchte er, dass die session nur bei aufruf von ressourcen innerhalb bestimmter "pfade" innerhalb des URLs wieder aufgenommen wird, bzw. außerhalb dieser "pfade" nicht erkannt wird.

          session.save_path regelt, wo im dateisystem des servers die sessiondateien von der speicherprozedur abgelegt werden sollen - das hat m.E. mit dem hier gefragten so gut wie gar nichts zu tun.

          Hast Du es ausprobiert?
          Wie stellt denn wohl PHP die Gültigkeit einer Session fest?

          Lösung folgt. Wie bekommen wir das jetzt hin, dass ich "meine" Lösung sagen kann, ohne dass Du sie siehst, bevor Du "Deine" gegeben hast und ich trotzdem nicht schummeln kann? *ggg*

          Harzliche Grüße aus http://www.annerschbarrich.de

          Tom

          --
          Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
          Nur selber lernen macht schlau
          1. hi,

            Hast Du es ausprobiert?

            nö, brauche ich glaub' ich nicht :-)

            Lösung folgt.

            bin gespannt.

            Wie bekommen wir das jetzt hin, dass ich "meine" Lösung sagen kann, ohne dass Du sie siehst, bevor Du "Deine" gegeben hast und ich trotzdem nicht schummeln kann? *ggg*

            du präsentierst deine - und ich gebe dann im zweifelsfalle zu, dass ich mich über die bedeutung von session.save_path geirrt habe.

            gruß,
            wahsaga

            --
            /voodoo.css:
            #GeorgeWBush { position:absolute; bottom:-6ft; }
            1. Hello,

              Hast Du es ausprobiert?

              nö, brauche ich glaub' ich nicht :-)

              benutzt Du ekeine Sessions? *verwundert guck*

              Lösung folgt.

              bin gespannt.

              Wie bekommen wir das jetzt hin, dass ich "meine" Lösung sagen kann, ohne dass Du sie siehst, bevor Du "Deine" gegeben hast und ich trotzdem nicht schummeln kann? *ggg*

              du präsentierst deine - und ich gebe dann im zweifelsfalle zu, dass ich mich über die bedeutung von session.save_path geirrt habe.

              Na gut, ich vertraue Dir.

              z.B. im Virtual Host wird für ein bestimmtes Verzeichnis oder auch nur eine bestimmtes Script der Session.Save_path eingestellt auf eine eigenes Verzeichnis.

              Cookies werden für die Domain vom Script mitgeschickt und daher vom Client auch gespiegelt, wenn irgend ein Script in der Domain aufgerufen wird.

              Der cookielandet nun beim Script im Sonderverzeichnis.

              PHP erkennt den Cookie, da er unter dem eingestellten Namen (default PHPSESSID) eingetroffen ist. Nun wurder der Cookie aber vom index-Script des Startverzeichnisses gesendet, dass seine Session "ganz normal" in /tmp/sess_* ablegt (was übrigens eine Sicherheitslücke ist). Unser Spezialscript legt seine Sessions aber in '/home/user/applicatuion/subdirectory/sessions' ab. PHP Schaut also, ob eine Datei mit dem Namen    'sess_'.$_COOKIE[session_name()]  im angegebenen Session-Dir vohanden ist. Leider ist da keine. Also legt PH eine neue an.

              Der nächste Aufruf (durch Link oder Post) erfolgt aber für eine ganz ander Seite außerhalb des Spezialverzeichnisses. Da gilt wieder 'tmp/sess_*' als Ziel. Schade nur, dass der jetzt gesendete Cookie dort auch wider nicht zu einer Session-Datei passt.

              Nun die Antwort auf die Frage, wie PHP denn wohl die Gültigkeit einer Session festsellt:

              gar nicht!

              PHP guckt nur nach einer vorhanden Sessiondatei und stellt ggf. die Sessiondaten wieder her. Ob die gültig sind oder nicht, interessiert PHP überhaupt nicht.

              Man muss also immer das Zusammenspiel zwischen

              session.save_path
                session.name
                session.cookie_path
                session.cookie_domain

              beachten.

              Harzliche Grüße aus http://www.annerschbarrich.de

              Tom

              --
              Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
              Nur selber lernen macht schlau
              1. hi,

                benutzt Du ekeine Sessions? *verwundert guck*

                doch - aber offenbar nicht auf so verschlungenen pfaden wie du.

                z.B. im Virtual Host wird für ein bestimmtes Verzeichnis oder auch nur eine bestimmtes Script der Session.Save_path eingestellt auf eine eigenes Verzeichnis.
                [...]
                PHP erkennt den Cookie, da er unter dem eingestellten Namen (default PHPSESSID) eingetroffen ist. Nun wurder der Cookie aber vom index-Script des Startverzeichnisses gesendet, dass seine Session "ganz normal" in /tmp/sess_* ablegt (was übrigens eine Sicherheitslücke ist). Unser Spezialscript legt seine Sessions aber in '/home/user/applicatuion/subdirectory/sessions' ab. PHP Schaut also, ob eine Datei mit dem Namen    'sess_'.$_COOKIE[session_name()]  im angegebenen Session-Dir vohanden ist. Leider ist da keine. Also legt PH eine neue an.

                OK, so lässt sich das geforderte umsetzen, da gebe ich dir recht.

                aber ob ich das für sinnvoll halten soll?

                zum einen kann ich es nicht für sonderlich optimal befinden, sessiondateien über das gesamte system zu verstreuen. (gut, da wäre immer noch _ein_ sessionverzeichnis mit diversen unterverzeichnissen denkbar.)
                und zum anderen frage ich mich, ob dann die garbage collection noch ohne weiteres funktioniert, wenn man seine sessiondateien derart über das system verstreuen würde? beachtet der wirklich auch nur für einzelne scripte umgebogene sessionverzeichnissebeim aufräumen ...?

                PHP guckt nur nach einer vorhanden Sessiondatei und stellt ggf. die Sessiondaten wieder her. Ob die gültig sind oder nicht, interessiert PHP überhaupt nicht.

                das ist mir klar; nur wie du über save_path die "gültigkeit" auf bestimmte "verzeichnisebenen" einschränken wolltest, war es eben nicht.

                gruß,
                wahsaga

                --
                /voodoo.css:
                #GeorgeWBush { position:absolute; bottom:-6ft; }
                1. echo $begrüßung;

                  und zum anderen frage ich mich, ob dann die garbage collection noch ohne weiteres funktioniert, wenn man seine sessiondateien derart über das system verstreuen würde? beachtet der wirklich auch nur für einzelne scripte umgebogene sessionverzeichnisse beim aufräumen ...?

                  Das "auch" würde ich streichen. Die GC betrachtet _nur_ den angegebenen save_path.
                  Ein Blick mit meinen PHP-Augen in die C-Quellen der session extension sagt mir, dass die GC des entsprechenden Handlers (da gibt es ja nicht nur den files-Handler) nur von session_start() (in Zeile 1259) [1] aufgerufen wird [2]. Davor findet ein php_session_initialize(...) statt, worin u.a. der save_path gelesen/an den Handler übergeben (?) wird.

                  Es ist sogar empfehlenswert, den save_path selbst einzustellen, wenn man nicht seine Session-Daten durch umkonfigurierte gc_maxlifetime-Werte anderer Scripts bzw. lokaler Konfigurationswerte vorzeitig verlieren will.

                  echo "$verabschiedung $name";

                  [1] Die Zeilennummern stimmen bei mir nicht mit den Zeilen überein. Es ist jedenfalls die (einzige) Zeile, die mit PS(mod)->s_gc beginnt.

                  [2] in Abhängigkeit von gc_probability, gc_divisor und dem Zufall

                  1. Hello,

                    Ein Blick mit meinen PHP-Augen in die C-Quellen der session extension sagt mir, dass die GC des entsprechenden Handlers (da gibt es ja nicht nur den files-Handler) nur von session_start() (in Zeile 1259) [1] aufgerufen wird [2]. Davor findet ein php_session_initialize(...) statt, worin u.a. der save_path gelesen/an den Handler übergeben (?) wird.

                    *ups*

                    Nun habe ich mich gerade über eine neue Quelle für die Quell-Files von PHP gefreut, aber leider ist dein Link bei mit leer, mit Ausnahme von Zeilennummern.

                    Wäre für eine aktuelle Quelle dankbar.

                    Harzliche Grüße aus http://www.annerschbarrich.de

                    Tom

                    --
                    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
                    Nur selber lernen macht schlau
                    1. moin

                      Nun habe ich mich gerade über eine neue Quelle für die Quell-Files von PHP gefreut, aber leider ist dein Link bei mit leer, mit Ausnahme von Zeilennummern.

                      Das scheint ein Problem vorzuliegen. Vorhin war es noch wie du erwartet hättest. Schau mal nach oben, da kuschelt sich alles zusammen in ein paar Zeilen :-(

                      dedlfix