Cornelia de Vos: KEINE SESSION-IDs

KEINE SESSION-IDs

Ich habe gestern den ganzen Tag im Web nach einer Lösung zu meinem Problem gesucht, aber keine gefunden ... habe aber einige Einträge in verschiedenen Foren gefunden, die dasselbe Problem hatte und zu keiner Lösung kamen - und ich bin dann selber zu einer Lösung gekommen. Daher mein Eintrag hier: falls andere Leute genauso verzweifelt nach einer Lösung suchen und das hier lesen, sparen sie sich vielleicht die stundenlange Suche, die ich hinter mir habe.

Meine Konfiguration lokal auf meinem PC zum Entwickeln der Seiten war: Win XP, Apache Server 2.0.54 und PHP 5.0.5

Mein Problem war, dass keine Session-IDs von einem PHP-Script zum anderen weitergereicht wurden. Weder per URL noch per Cookie. Ich habe in meinen php-Scripten alles versucht, alles getestet, bin jedem kleinen Hinweis, den ich in den Foren etc. gefunden  habe nachgegangen - die Session-IDs blieben verschwunden. Ich konnte sie auch nicht abfragen. SID war immer leer, auch session_id() ergab keinen Wert, $_SESSION["blabla"] war dem Script, mit dem ich das weiterverarbeiten wollte nicht bekannt (leer) usw.

Allmählich kam in mir der Verdacht auf, an meiner Konfiguration könnte etwas nicht stimmen. In PHP.ini war die session.save_path korrekt eingestellt (session.save_path = C:\temp) (so heißt das Verzeichnis auf meiner HD). Ich habe alle Einstellunge x Mal geprüft, auch mal verändert, geprüft ... nichts. Keine Session-IDs. Auch weitere Parameter habe ich überprüft, ich konnte den Fehler einfach nicht finden. Auch das 'alte' session-Handling mit session_register() und unregister usw. habe ich nicht mit $_SESSION vermengt usw. usw...
Schließlich dachte ich, es könnte an meiner Symantec Norton Internet Security liegen (das mir vorher schon bei meinen Javascripten mit automatisch generiertem Code dazwischengefunkt hatte) oder an den Cookie-Einstellungen im IE, habe alles Mögliche probiert - kein Erfolg.

Ich habe meine Files dann auf den Web-Server geladen, wo sie mal laufen sollen wenn sie fertig sind, und dort funktionierte alles einwandfrei, die Session-IDs wurden weitergereicht. Also nur lokal bei mir funktionierten die Sessions nicht.
Das erhärtete den Verdacht, die Konfiguration stimmt nicht. Nachdem ich Stunden über Stunden gesucht habe, entschied ich mich, das Ganze (Apache und PHP) neu zu installieren. Da der Webserver, auf dem die Scripten laufen sollen, mit der älteren Version PHP 4.3.10 läuft, habe ich mir nun unter Win XP installiert: Apache Server 2.0.54 und PHP 4.3.10 (statt 5.0.5)

Und siehe da: alles lief sofort (nachdem die gängigen Parameter in Apaches httpd.conf und PHPs php.ini wie z.B. session.save_path wieder angepasst waren) einwandfrei.

Daher mein Tipp: wenn keine Session-IDs weitergegeben werden UND die Scripten fehlerfrei sind (z.B. auf einem anderen Webserver laufen), folgendes tun:

  • php.ini überprüfen: weist "session.save_path" auf ein Verzeichnis, das es auch wirklich gibt?
  • Neuinstallation (bei mir statt PHP 5.0.5 jetzt PHP 4.3.10, aber ich glaube, der Fehler war in irgendeiner Konfigurationseinstellung, Apache habe ich auch gleich neu installiert, - eine Neuinstallation ist im Vergleich zur ewigen FEhlersuche die schnellere Lösung!)

Falls es einen Leser mit dem gleichen Problem interessiert: hier noch meine Einstellungen in der php.ini zu session:

session.save_handler = files
session.save_path = C:\temp
session.use_cookies = 1
session.name = PHPSESSID
session.auto_start = 0
session.cookie_lifetime = 0
session.cookie_path = /
session.cookie_domain =
session.serialize_handler = php
session.gc_probability = 1
session.gc_divisor     = 100
session.gc_maxlifetime = 1440
session.bug_compat_42 = 1
session.bug_compat_warn = 1
session.referer_check =
session.entropy_length = 0
session.entropy_file =
session.cache_limiter = nocache
session.cache_expire = 180
session.use_trans_sid = 0
url_rewriter.tags = "a=href,area=href,frame=src,input=src,form=,fieldset="
session.save_path= C:\PHP\sessiondata

  1. echo $begrüßung;

    Leider hast du die wirkliche Ursache des Problems nicht gefunden. Ob es sich immer durch Neuinstallation beseitigen lässt, bezweifle ich.

    Neulich hatte jemand ein Problem, dass ein PHP-Script zwar beim Provider lief, lokal aber nicht. Es stellte sich heraus, dass der Browser lokal einfach keine Kekse (Cookies) annehmen und zurücksenden wollte. Grund dafür war, dass der Browser dies bei einstelligen Domain-Namen wie "localhost" einfach nicht macht, da das für ihn wie eine Top-Level-Domain aussieht. Ebensowenig wäre es ja sinnvoll einen Keks für ganz .de, .com, ... anzunehmen.
    Als einfachste Lösung erwies sich, das Script statt über http://localhost/... über http://127.0.0.1/... aufzurufen. Ein "mehrstelliger" Eintrag in der hosts-Datei zusätzlich zu localhost wäre sicher auch eine Lösung.

    Nichtsdestotrotz hätte doch aber bei verweigertem Keks die Übergabe der SID in der URL erfolgen sollen, wenn nicht jemand session.use_only_cookies ausgeschaltet hat.

    echo "$verabschiedung $name";