2013-02-01 16 views
2

我到處搜索過,但無法找到任何關於此的信息。在爲Apache索引使用自定義標頭時設置PHP cookie

這裏的情況是:

我使用的是PHP文件作爲 「HeaderName」 我的網絡空間:

的.htaccess有以下幾點:

Options +Indexes 
HeaderName /.resource/header.php 

在header.php中我包括(在回顯任何數據之前的第一件事)一個小的包含,用於檢查是否存在參數並設置cookie:

if (isset($_GET['css_style']) && $_GET['css_style'] != "") { 
    $css_style = $_GET['css_style']; 
    if (setcookie('css_style', $css_style, 0, "/", "xxx.xxxx.xxx") !== false) { 
    echo "<!-- cookie set! ".$css_style." -->"; 
    } else { 
    echo "<!-- cookie NOT set! ".$css_style." -->"; 
    } 
} 

現在,我在同一站點上的其他PHP頁面中使用此代碼段,在任何目錄中,Cookie總是在我期望的時候設置。它在瀏覽器的cookie列表中列出幷包含所需的值。

但是,當相同的腳本作爲header.php中的自動索引的一部分執行時,我得到了「cookie set」輸出,所以我知道所有正確的條件都適用,但cookie不存在在瀏覽器的cookie列表中。如果我直接調用header.php ,那麼cookie會被設置並出現在瀏覽器的列表中。

所以我的問題: Apache做了什麼可以防止cookie被丟棄?該網站在託管環境中的Apache上運行,但我無法訪問中央服務器配置。

我已經嘗試了各種不同的方法來設置cookie,默認值,過期0或時間()+ 3600 * 24,有和沒有路徑和域,沒有運氣。我很難過。特別是因爲它與我正在查看的索引放置在同一目錄中的常規文件一起工作。

+0

在那個cir cumstance,在setcookie()調用之前有輸出嗎?打開display_errors。 '的error_reporting(E_ALL); ini_set('display_errors',1);' –

+0

另外,你指的是什麼自動索引? –

+0

嗨,我不知道apache web服務器是做什麼的,但是我的腳本在設置cookie之前都沒有發送任何輸出。 另外,腳本在設置cookie時不會返回錯誤,因爲它會在有任何輸出被寫入的情況下(我也測試過這個) 通過自動索引我的意思是「選項+索引」功能,其中索引文件是由Apache生成的,如果它缺少給定的目錄 –

回答

1

你想,如果你想發送的cookie來決定查詢參數 的mod_index創建文本/ *,但沒有頭

可以使用mod_headers中發送的cookie:

http://httpd.apache.org/docs/current/mod/mod_headers.html

和用於條件發送的mod_setenfif:

http://httpd.apache.org/docs/current/mod/mod_setenvif.html

+0

感謝您的回覆,這當然解釋了我遇到的問題!不幸的是,我沒有訪問Apache配置。我從此通過編寫我自己的index.php來解決這個問題 –

相關問題