網站製作學習誌

記錄學習製作網站的一切

IE7 對錯誤 Hostname 在處理 Cookie 上的問題

昨天發現了一個 IE7 的問題,我們兩個做了一個討論後在這裡把結果記錄下來。

要重現這個問題很簡單,請照著以下的步驟試試看。

首先在 Windows 的 hosts 檔裡加入粗體部份:

1
2
127.0.0.1    localhost
<strong>127.0.0.1    host_name</strong>

然後在網站根目錄底下建立一個 session.php ,內容如下:

1
2
3
4
5
6
7
8
<?php
session_start();
$test = (isset($_SESSION['test']))
? (int) $_SESSION['test']
: 0;
echo $test;
$test ++;
$_SESSION['test'] = $test;

然後試試用 IE7 瀏覽以下網址:

1
http://host_name/session.php

試試看去重新整理這個頁面,會發現 Session 沒辦法動作。

不過同樣的網址在 IE6 和 Firefox 上, Session 都會在每次重新整理時正常加一;但如果把 host_name 換成 localhsot ,則每個瀏覽器都會正常動作。

一開始我以為是 IE7 有支援 HttpOnly Cookie 的設定,不過這項設定是在 PHP 5.2 以後才會有,而凱用的是 PHP 5.1.6 ;然而 Firefox 也支援 HttpOnly Cookie 卻能正確運作,所以並不是這個問題。

凱告訴我,他在 hosts 上加入 127.0.0.1 my.xxx.net 的設定,然後再用以上三種瀏覽器去瀏覽 http://my.xxx.net/session.php ,發現 Session 是可以運作的。這時我們就想到會不會是 host_name 有底線的關係,所以凱很快地重新把底線去掉後再用 IE7 測試,結果就正常了。

最後我們兩個人的結論是:

在 IE7 中,有底線的 hostname 會沒辦法正確使用 Cookie 。

其實微軟不建議 Hostname (或 Domain Name ) 使用底線字元,這個可以參閱「為電腦、 網域、 站台及 OU 命名慣例在 Active Directory 」一文。

Comments