Ankündigung

Einklappen
Keine Ankündigung bisher.

Fehlermeldung bei session_start()

Einklappen

Neue Werbung 2019

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

  • Fehlermeldung bei session_start()

    Hallo,

    ich habe bisher noch nicht recht viel mit Sessions rumhantiert, musste mich jetzt aber mal damit befassen.

    Für einen einfaches Login-Mechanismus verwende ich nun Sessions.

    Lokal hat alles ganz gut funktioniert, aber beim ersten Test beim Webhoster kam diese Fehlermeldung hier:

    Notice: session_start(): ps_files_cleanup_dir: opendir(/tmp) failed: Permission denied (13) in /www/htdocs/abc...xyz/main.php on line 5
    Die Meldung kommt aber nur sporadisch.

    Hier im Forum hab ich nur den Thread hier gefunden, der halbwegs in die gleiche Richtung geht. Dabei handelt es sich aber wohl um Windows-spezifische Problemchen. Nur da läuft es bei mir ja problemlos.

    Hier geht's übrigens zu meiner phpinfo()

    Da das Forum heute Nacht zeitweise nicht verfügbar war, hab ich mal gegoogelt und bin bei der Konkurrenz auf das hier gestoßen Klick mich

    Da wird zwar darauf hingewiesen, dass der Hoster was verbockt hat, aber nicht so direkt was.

    Soll der Session-Save-Path von Haus aus auf ein lokales Verzeichnis von mir zeigen?
    Sollte ich das (wenn möglich) mit ini_set() korrigieren oder lieber nicht?

    Vielen Dank schonmal.
    Gerhard
    **********************************
    Nein, ich bin nicht die Signatur.
    Ich putze hier nur.
    **********************************

  • #2
    Re: Fehlermeldung bei session_start()

    Zitat von Der_Gerhard
    Lokal hat alles ganz gut funktioniert, aber beim ersten Test beim Webhoster kam diese Fehlermeldung hier:

    Notice: session_start(): ps_files_cleanup_dir: opendir(/tmp) failed: Permission denied (13) in /www/htdocs/abc...xyz/main.php on line 5
    Da hat dein Provider wohl Mist gebaut (falsche Zugriffsbits für /tmp gesetzt).

    Zitat von Der_Gerhard
    Die Meldung kommt aber nur sporadisch.
    Jupp, der Garbage Collector, der dafür zuständig ist, wird nicht bei jedem Aufruf von session_start() angeworfen (s.a. session.gc_divisor und session.gc_probability).

    Kommentar


    • #3
      Über Hinweise auf den Garbage Collector bin ich auch schon gestolpert.
      Das ist aber doch eine Komponente von PHP nehme ich mal an.
      Wenn PHP (und damit der Apache) auf /tmp zugrifen kann, um die Session-Variablen abzulegen warum kann er es dann nicht mehr, wenn er mit dem Garbage-Collector aufräumen will?
      Es ist doch in beiden Fällen der gleiche User, oder nicht?

      Unabhängig von den Zugriffsrechten, ist es sinnvoll, /tmp zu verwenden?
      Soll ich lieber das Verzeichnis für meine Scripts irgendwo anders hinlegen oder dem Hoster sagen, er soll mal Hand anlegen?
      **********************************
      Nein, ich bin nicht die Signatur.
      Ich putze hier nur.
      **********************************

      Kommentar


      • #4
        Zitat von Der_Gerhard
        Wenn PHP (und damit der Apache) auf /tmp zugrifen kann, um die Session-Variablen abzulegen warum kann er es dann nicht mehr, wenn er mit dem Garbage-Collector aufräumen will?
        Es ist doch in beiden Fällen der gleiche User, oder nicht?
        opendir() benötigt Leserechte auf das Verzeichnis. Für die Speicherung der Sessionfiles werden dagegen Schreib- und Ausführrechte benötigt. Das sind also zwei Paar Schuhe.

        Zitat von Der_Gerhard
        Unabhängig von den Zugriffsrechten, ist es sinnvoll, /tmp zu verwenden?
        Zumindest wenn PHP als Apache-Modul läuft, ist das alles andere als sinnvoll. Jeder Webspacebesitzer auf diesem Server legt die Sessionfiles dann unter dem gleichen Benutzer in /tmp ab und hat somit auch vollen Zugriff auf die Sessionfiles der anderen Benutzer.
        Läuft PHP über CGI sieht das etwas anders aus, da dann jeder virtuelle Host unter einem anderen Benutzer laufen kann.

        Zitat von Der_Gerhard
        Soll ich lieber das Verzeichnis für meine Scripts irgendwo anders hinlegen oder dem Hoster sagen, er soll mal Hand anlegen?
        Sowohl als auch. Zunächst solltest du definitiv zusehen, den session.save_path per .htaccess-Datei oder ini_set() in ein anderes Verzeichnis legen (Zugriff von Außen verhindern). Gleichzeitig sollte dein Hoster aber auch zusehen, dass er die Konfiguration in den Griff bekommt.

        Kommentar


        • #5
          Hmm. Auch wenn es nur eine Notice ist, bedeutet das, dass das /tmp Verzeichnis vollgemüllt wird und nicht mehr aufgeräumt werden kann?

          Evtl. wurde absichtlich der Zugriff eingeschränkt, damit nicht jeder rankommt.
          Aber der Garbage-Collector sollte schon noch dürfen ^^

          Der Save-Path muss ja eigentlich nur per lokales Filesystem zugänglich sein. Wenn das außerhalb von htdocs liegt, sollte sowieso kein Zugriff von außen möglich sein.
          Nur weiß ich nicht, ob ich außerhalb meines htdocs-Unterverzeichnisses überhaupt wo zugreifen kann.
          Da werd ich mal beim Hoster nachbohren.

          Danke für die Hinweise.
          **********************************
          Nein, ich bin nicht die Signatur.
          Ich putze hier nur.
          **********************************

          Kommentar


          • #6
            Zitat von Der_Gerhard
            Hmm. Auch wenn es nur eine Notice ist, bedeutet das, dass das /tmp Verzeichnis vollgemüllt wird und nicht mehr aufgeräumt werden kann?
            Vielleicht erledigt dein Provider das per Cronjob.

            Zitat von Der_Gerhard
            Evtl. wurde absichtlich der Zugriff eingeschränkt, damit nicht jeder rankommt.
            Eine sehr zweifelhafte Methode. Die Sessionfiles an sich sind ja auch weiterhin lesbar. Also eher ein Fall von security through obscurity.

            Zitat von Der_Gerhard
            Der Save-Path muss ja eigentlich nur per lokales Filesystem zugänglich sein. Wenn das außerhalb von htdocs liegt, sollte sowieso kein Zugriff von außen möglich sein.
            Mit "von außen" meinte ich nicht nur den Zugriff per HTTP. Auch andere Kunden auf dem Server sollten nicht in der Lage sein, über das Dateisystem auf deine Sessionfiles zuzugreifen.

            Kommentar


            • #7
              Zitat von Der_Gerhard
              Hmm. Auch wenn es nur eine Notice ist, bedeutet das, dass das /tmp Verzeichnis vollgemüllt wird und nicht mehr aufgeräumt werden kann?
              Darum wird sich Dein Hoster schon anderweitig kümmern.

              Zitat von Der_Gerhard
              Evtl. wurde absichtlich der Zugriff eingeschränkt, damit nicht jeder rankommt.
              Zitat von Der_Gerhard
              Aber der Garbage-Collector sollte schon noch dürfen ^^
              Nein, sollte er nicht. Sonst erlaubt sich ein User den Scherz, die maxlifetime herunterzusetzen und all Deine Sessiondaten sind verschwunden...

              Zitat von Der_Gerhard
              Der Save-Path muss ja eigentlich nur per lokales Filesystem zugänglich sein. Wenn das außerhalb von htdocs liegt, sollte sowieso kein Zugriff von außen möglich sein.
              Richtig. Aber das Problem mit der maxlifetime bleibt und daher tut Dein Hoster gut daran, den Zugriff auf das Verzeichnis zu beschränken.

              Zitat von Der_Gerhard
              Nur weiß ich nicht, ob ich außerhalb meines htdocs-Unterverzeichnisses überhaupt wo zugreifen kann.
              Da werd ich mal beim Hoster nachbohren.
              Wenn nicht, kannst Du auch ein Verzeichnis innerhalb des DocumentRoot schützen (lassen). Sollte ja auch kein Problem darstellen.

              Kommentar


              • #8
                Zitat von karl-150
                Nein, sollte er nicht. Sonst erlaubt sich ein User den Scherz, die maxlifetime herunterzusetzen und all Deine Sessiondaten sind verschwunden...
                Der imho bessere Weg ist in diesem Fall allerdings dann, das ändern von session.gc_maxlifetime gleich ganz zu verbieten.

                Kommentar


                • #9
                  Zitat von xabbuh
                  Der imho bessere Weg ist in diesem Fall allerdings dann, das ändern von session.gc_maxlifetime gleich ganz zu verbieten.
                  Ja, wenn sich das ohne großen Aufwand bewerkstelligen ließe, wäre diese Lösung sicherlich die sinvollere - ich wüsste gerade aber nicht wie...

                  Kommentar


                  • #10
                    Zitat von karl-150
                    Ja, wenn sich das ohne großen Aufwand bewerkstelligen ließe, wäre diese Lösung sicherlich die sinvollere - ich wüsste gerade aber nicht wie...
                    Da PHP hier scheinbar als Apachemodul läuft, wäre das so recht simpel zu lösen:
                    Code:
                    php_admin_value session.gc_maxlifetime 1440
                    Eine simplere Lösung fällt mir auf die Schnelle auch nicht ein.

                    Kommentar


                    • #11
                      Zitat von xabbuh
                      Da PHP hier scheinbar als Apachemodul läuft, wäre das so recht simpel zu lösen:
                      Code:
                      php_admin_value session.gc_maxlifetime 1440
                      Nicht ganz. Per ini_set() lässt sich die Einstellung auch weiterhin ändern.

                      Kommentar


                      • #12
                        Stimmt, das habe ich übersehen. ini_set() müsste zusätzlich also auch noch deaktiviert werden.

                        Kommentar


                        • #13
                          Re: Fehlermeldung bei session_start()

                          Hmmm. Also jetzt nochmal ne ganz dumme Frage...

                          Aussage 1:
                          Zitat von xabbuh
                          Da hat dein Provider wohl Mist gebaut (falsche Zugriffsbits für /tmp gesetzt).
                          Leserechte auf das Verzeichnis sollten gesetzt werden.

                          Aussage 2:
                          Zitat von karl-150
                          Zitat von Der_Gerhard
                          Aber der Garbage-Collector sollte schon noch dürfen ^^
                          Nein, sollte er nicht. Sonst erlaubt sich ein User den Scherz, die maxlifetime herunterzusetzen und all Deine Sessiondaten sind verschwunden...
                          Es ist gar nicht so schlecht, wenn der Garbage-Collector nicht ran darf.

                          Ist es jetzt OK, dass das in dem Verzeichnis nicht klappt oder nicht?


                          Und noch nen kleinen Tipp zum Ändern des Parameters könnte ich gebrauchen. register_globals hab ich per .htaccess auf Off gestellt. Dazu hab ich diese Zeile eingetragen:
                          php_flag register_globals Off

                          Das wollte ich jetzt auch mit session.save_path auch so erledigen und hab das hier probiert:
                          php_flag session.save_path /www/htdocs/v127822/tmp

                          Das Verzeichnis tmp hab ich natürlich schon erzeugt. Die Zugriffrechte sind 777.

                          Danach wurde als "local value" aber nur noch 0 statt /tmp angezeigt. Nicht wie erwartet /www/htdocs/v127822/tmp .
                          Geht das nur mit ini_set() im Script selbst?
                          **********************************
                          Nein, ich bin nicht die Signatur.
                          Ich putze hier nur.
                          **********************************

                          Kommentar


                          • #14
                            Re: Fehlermeldung bei session_start()

                            Zitat von Der_Gerhard
                            Ist es jetzt OK, dass das in dem Verzeichnis nicht klappt oder nicht?
                            Wenn die Sessiondateien aller Kunden im gleichen Verzeichnis liegen, ist das nicht nur OK, sondern gut so.

                            Zitat von Der_Gerhard
                            Danach wurde als "local value" aber nur noch 0 statt /tmp angezeigt. Nicht wie erwartet /www/htdocs/v127822/tmp .
                            Geht das nur mit ini_set() im Script selbst?
                            Es muss php_value heißen. php_flag wird nur für "ein/aus"-Direktiven verwendet.

                            Kommentar


                            • #15
                              Re: Fehlermeldung bei session_start()

                              Zitat von karl-150
                              Zitat von Der_Gerhard
                              Ist es jetzt OK, dass das in dem Verzeichnis nicht klappt oder nicht?
                              Wenn die Sessiondateien aller Kunden im gleichen Verzeichnis liegen, ist das nicht nur OK, sondern gut so.
                              Gut. Dann brauch ich meinem Hoster ja auch keine Mail wegen der Zugriffsrechte schreiben.
                              Höchstens um unterschiedliche Verzeichnisse zu verwenden.

                              Zitat von karl-150
                              Es muss php_value heißen. php_flag wird nur für "ein/aus"-Direktiven verwendet.
                              Aaaaaaaaaaaaaahhhh. *handvordenkopfklatsch*

                              Danke.

                              Mit ini_set() hatte es schon geklappt. Ich will das aber natürlich für alle Scripts.
                              Muss ich unbedingt die Rechte 777 vergeben oder geht weniger?
                              Mit 755, was nach dem Erzeugen angegeben war, hat es schonmal nicht geklappt.
                              **********************************
                              Nein, ich bin nicht die Signatur.
                              Ich putze hier nur.
                              **********************************

                              Kommentar

                              Lädt...
                              X