ttt

getttyent

(PHP) httpsなページとhttpなページとの間を移動したときセッション情報が消えてしまう・・

2012-12-18 23:59:00 | デジタル・インターネット

PHPで、ずいぶんと悩んだ、という話。

httpsでアクセスしたページでセッション情報を設定して、その後、httpでアクセスするページへ移動したら、セッション情報が消えてしまいました。
試してみたところ、httpからhttpsへの遷移でも、セッション情報が消えてしまう。

これまで使っていたサーバではそんなことはなくて、ある特定のサーバ1つでだけ、このセッション情報が消えてしまう現象が発生。

なんでだろう?と1日悩んで、やっと原因を発見しました。

suhosinでした。

ネット検索して見つけた、これらの情報が参考になりました。

http://www.yireo.com/blog/798-switch-between-http-and-https-looses-php-session
http://stackoverflow.com/questions/441496/session-lost-when-switching-from-http-to-https-in-php
http://www.hardened-php.net/suhosin/configuration.html

php.iniに
suhosin.session.encrypt=Off
を書き足したところ、無事に、セッション情報が保持されるようになりました。

suhosinが有効になっている場合、セッション関係の情報が暗号化されているらしく、そのcrypt keyに、DocumentRootを使うらしい。ただ、今回のサーバでは、httpとhttpsとでDocumentRootが違っていて、そのせいで、セッション情報がうまく保持されなかったのではないか?ということ。

上記の設定だと、せっかくのセキュリティ対策機能がゆるゆるになりそうなので、今回の場合では
suhosin.session.cryptdocroot=Off
とすることで十分でした。

ちなみに、ほかのサーバではsuhosinを使っていなかったので(インストールはされていたけど有効になっていなかったり)、問題が起きなかった、というだけでした。

20121218

写真は本文と関係ありません。