このエントリーをはてなブックマークに追加 Twitterでツイート セッションでプチはまり

複数ページに分かれたフォームでデータエントリーを行う際、途中のパラメータの保存にセッションを使っているんですが、今回はそのセッション絡みでちょっとはまってしまったので、忘れないようにメモっときます。

セッションを使う際、次のような感じで宣言しますよね。

session_name('hogehoge');
session_start();

これまでsession_name関数で指定する名前をあまり意識していなかったこともあり、今回’.’(ピリオド)を含んだものにしてしまったら、セッション情報が常に空っぽになっており、うまく機能してくれませんorz

マニュアルサイトを読み返してみると、「セッション名は英数字のみで構成されている必要があり、また、 短く、その内容が分かるようなものである必要があります」とのこと。さらにその下の警告文には「そうでない場合、 新規セッション ID が毎回生成されます。 」とあり、英数字以外の’.’を含んでいた関係で、アクセスする度にセッションIDが生成されてしまい、セッション情報が常に空になっていたようです。

原因がわかったので、早速セッション名から’.’を削除してみると、開発環境では問題なく動作するようになりました。続いて、作りこんだものを本番環境に設置。動作確認してみると、なぜか修正前の開発環境のようにセッション情報が保持されていないような振る舞いをしてくれます。開発環境では大丈夫なのに、本番環境ではダメなんて。

もう一度マニュアルサイトを見直すと、セッション名は「短く」とあります!!
確かに今使っている名前は16文字。多少長いのかもと思い、試しに10文字にしてみると、本番環境でも問題なく動作するようになりました。

開発環境と本番環境を比べてみると、微妙にapacheの設定やphpのバージョンが異なっています。セッション名って環境に依存するものだったのですね。。。

投稿日:2010年4月3日
  • ※コメントは、スパム対策などのためIPアドレスにて制限しております。
  • ※誹謗や中傷、スパムなど、不適切な内容は公開いたしません。ご了承ください。