Jochen: Session kann nicht gestartet werden

Hallo, mein PHP-Programm beginnt mit

<?php
  session_start();

Und dann kommt auch schon die Fehlermeldung

Warning: session_start() [function.session-start]: open(/usr/home/stadtsh/.tmp/sess_c3c62f6f8a9efd57fd14b985aabbe35a, O_RDWR) failed: No such file or directory (2) in /usr/www/users/stadtsh/index.php on line 2

Was kann die Ursache sein? Warum soll da eine temp. Datei geöffnet werden?

  1. Hallo Jochen,

    die Session-Inhalte in einer Datei abzulegen ist das Default-Verhalten von PHP. Die Funktion session_start prüft, ob ein Session-Cookie vorliegt. Wenn ja, öffnet sie die existierende Session-Datei und liest die gespeicherten Werte ein.

    Das Speichern der Session-Daten in der Session-Datei erfolgt durch den Aufruf von session_write_close(), etwas, was PHP nach Ende deines Scripts normalerweise automatisch tut; du musst Dich nicht drum kümmern.

    Allerdings - wenn es beim Schreiben der Sessiondatei Probleme gibt, bekommst Du das nicht unbedingt mit. Dein Script ist zu Ende und das Senden an den Client ist abgeschlossen (zumindest ist das so meine Erfahrung gewesen, als ich mal einen eigenen Session-Handler bauen wollte und die Bugs darin gejagt habe). D.h. es könnte sein, dass PHP die Session-Datei nicht schreiben konnte. Beim nächsten Request will es sie lesen, findet sie nicht und gibt die Warnung aus.

    Ein typisches Problem an dieser Stelle ist, dass PHP auf den Pfad nicht zugreifen kann, in dem es die Session-Dateien ablegen will. In dem Fall musst Du entweder passend Rechte vergeben, oder den save_path der Sessions ändern (entweder so oder so).

    Um Probleme beim Schreiben der Session zu finden, kann es auch helfen, nach dem letzten Schreibzugriff auf $_SESSION manuell session_write_close() aufzurufen. Wenn DANN was schief geht, findet man eine Fehlerausgabe im Output.

    Rolf

    --
    sumpsi - posui - clusi
  2. Hello,

    <?php
      session_start();
    
    

    Und dann kommt auch schon die Fehlermeldung

    Warning: session_start() [function.session-start]: open(/usr/home/stadtsh/.tmp/sess_c3c62f6f8a9efd57fd14b985aabbe35a, O_RDWR) failed: No such file or directory (2) in /usr/www/users/stadtsh/index.php on line 2

    Was kann die Ursache sein? Warum soll da eine temp. Datei geöffnet werden?

    Das bedeutet, dass im spezifizierten Session-Verzeichnis (hier fehlerhafterweise in ".tmp") nicht geschrieben werden darf, bzw. es das Verzeichnis gar nicht gibt.

    In Shared-Hosting-Umgebungen sollte u. a. auch das Sessionverzeichnis grundsätzlich für jede Domain (VirtHost) separat vereinbart werden und die Prozesse der Domain dann auch darauf Zugriff haben (-> open_basedir) und/oder ab Apache 2.4 auch Direktiven für den User, unter dem die Domain-Scripte laufen. Andere Webserver haben ähnliche Sicherheitsschranken.

    Eine saubere Einrichtung verhindert Kreuzangriffe.

    Liebe Grüße
    Tom S.

    --
    Es gibt nichts Gutes, außer man tut es!
    Das Leben selbst ist der Sinn.
  3. ich vermute mal, das Verzeichnis

    /usr/home/stadtsh/.tmp/
    

    existiert nicht oder ist für den Benutzer, unter dem PHP läuft, nicht les- oder beschreibbar.

    Übrigens: Ziemlich ungewöhnlicher Speicherort. Es sei denn das Betriebssystem ist ein BSD-Derivat und Du führst das Skript manuell in einer Shell aus. Dann bist Du wohl der Benutzer "stadtsh" und musst auf Grund der Konfiguration den versteckten Ordner ".tmp" in Deinem Heimatverzeichnis anlegen:

    cd $HOME;
    mkdir .tmp
    

    sollte reichen. Informiere Dich darüber, wie PHP auf Deinem System konfiguriert ist. (Und warum gerade so!)