Cookieにはまる(「ドメインにはアンダーバーは使えないのだ」の巻)
月額10,290円の専用レンタルサーバー【E-server】
1年半ほど前に開発していたプロジェクトを復活させようとして、Vistaにテストサーバを構築して、テストし始めました。すると、1年半前はちゃんと動いていたはずのWEBアプリ(PHP+MySQL)が全く動きません。cookieによるセッション管理を行っているのですが、cookieが焼かれていないようです。ためしに、IE7のアドレス欄に、「JavaScript:alert(document.cookie);」とやってみると、やっぱり空です。あれー、そんはなずはないんだけどな・・・。
結論的には、テストサーバでホストアドレスを「_(アンダーバー)」を含めていることが原因でcookieがIE7では焼かれていなかったのですが、それに気づくのに数時間かかかりました。こういのうを「はまる」というんですね。
まず、IE7の設定を見直しました。メニューの「ツール」→「インターネットオプション」→「プライバシー」で「中-高」を「中」に下げてみるが駄目でした。どうなっているんだ、とFirefoxでやってみると、ちゃんとログインできます。クッキーは焼かれているみたいです。
PHPのsetcookieがIE7に対応していないのかなと一瞬思いましたが、今までIE7で何度もテストを行ってきて、こんなのは初めてです。ただ、今回、Vistaでテストサーバを構築するに当たり、PHPのバージョンを今までの4.3xではなく5.2にしてみましたので、それが原因かなと考えました。試しに、4.3xでXP場に構築したサーバで試してみました。すると、動きました。
さらに、テストサーバではなくて、レンタルサーバにアップしてテストしてみたところ動きます。そのため、「ああ、PHPのバージョンのせいだな」と間違った仮説をここで立ててしまいました。
そこで、PHP.netのページを覗いてみました。まず、PHPの5.2からクロスサイトスクリプティング対策として「httponly」という設定が可能になったことを知りましたが、これは関係なさそうです。続いて、ページ下のユーザーズ・コメントを読んでいて、解決策の糸口が見つかりました。
domain names must contain at least two dots (.), hence 'localhost' is invalid and the browser will refuse to set the cookie!
とあります。さらに、
It is not the length of the hostname but the use of the underscore (_) char within it which makes IE (silently) freak out. The use of underscores in hostnames is an RFC violation and may very well not be supported at all by a browser, proxy or any http client.
というコメントに目が留まりました。「アンダーバー」とか「アンダースコア」と呼ばれるものはRFC違反だそうだ。恥ずかしながら知りませんでした。
今回、Vistaのサーバに構築したテストサーバは安易にも「test_vista.*****.jp」とかいう形式のものでした。XPのテストサーバは「test2.*****.jp」とかいうものでしたので問題なく動作したというわけです。つまり、cookieが動作しなかったのは、「Vistaだからでもなく」「IE7の保護モードのせいでもなく」「PHPのバージョンのせいでもなく」、「私のテストサーバのホスト名の付け方がRFC違反だったから」でした。分かってみれば単純な話ですが、はまってしまいました。
ちなみに、IE6でも、アンダーバーのついたホスト名ではcookieは焼けないようで、昔からのようです(Windows Updateで或る時からそのようなパッチが提供されたという情報も後で読みましたが、細かいことはまだ調べられていません)。いずれにせよ、今の今まで「_」がドメインに使えないって知らなかったのが恥ずかしいです。メールアドレスのアカウント名では普通に使えていますからね。私は基本的にハイフン「-」よりアンダーバー「_」の方が好きなんですが・・・。アンダーバーがあると、URLのリンクの下線とくっついて、フィッシング詐欺などの温床になりやすいかもという配慮でそうなっているのか、理由がよく分からないですね。はまりました、むむむ。
■当サイト オススメのレンタルサーバー
ウイルスチェックが全サービス無料のほか、フリーダイヤルによる
安心の電話サポートが深夜まで対応している。
月額1,995円からと格安でこのサービスを受ける事が出来る。
CGI/SSI/PHP/MySQL/PostgreSQL のほか、ショッピングカートも無料。
| 固定リンク | コメント (0) | トラックバック (0)


最近のコメント