Nachdem Debian Squeeze veröffentlicht wurde, habe ich nach und nach meine Webprojekte auf einem Squeeze System (PHP 5.3) getestet und dabei einige Probleme gefunden. Eines davon hat mich eine Weile Zeit gekostet zu lösen. Es ging um ein Projekt in dem eine Session über mehrere Subdomains benutzt wurde. Also www.domain.de und subdomain.domains.de sollten beide auf die gleiche Session zugreifen, aber immer nach einem Switch der Domain war die Session leer. Probleme damit hatte ich schon öfter, wenn man zum Beispiel nicht die richtige Cookie Domain beim Session Cookie setzt, aber dieses mal wurde keine neue Session generiert, sondern die Session ID blieb gleich, nur die Daten wurden reseted. Glücklicherweise fand ich dann diesen Post auf PHP.net.

debian 5 installs by default the php-suhosin module, which changes the behavior of session_set_save_handler read/write function. on calling the session write function the session data will be encrypted, and the returning string from the read function are decrypted and verified. the encrypted data is no more compatible with session_encode/session_decode. and breaks by default, subdomain handling and multiple host setups where different document roots are used.

Suhosin verschlüsselt die Session Daten und bezieht hierfür die Document Root mit ein. Glücklicherweise kann man das Suhosin abgewöhnen indem man die in der Dokumentation beschriebenen Settings anpasst. Ich habe es gleich komplett abgeschaltet, aber man kann wohl auch den Salt anpassen.

$ nano /etc/php5/cgi/conf.d/suhosin.ini
; Transparent Encryption Options
suhosin.session.encrypt = off

Man kann es auch für einzelne vhosts abschalten per php_value oder in der vhost php.ini wenn man verschiedene definieren kann.

Leave a Reply