2012-06-02 14 views
0

可能重複:
Accessing $_COOKIE immediately after setcookie()設置cookie並調用它後接收錯誤

所以我用下面的下面的代碼的多語言功能添加到我的網站:

if(isset($_GET['lang']) && $_GET['lang'] != ""){ 
setcookie("lang", $lang, time()+360*360*3600); 
}elseif(!isset($_COOKIE["lang"]) || $_COOKIE["lang"] == ""){ 
setcookie("lang", "en", time()+360*360*3600); 
} 
include 'lang/'.$_COOKIE["lang"].'.php'; 

現在,當第一次執行代碼時,它無法找到`$ _COOKIE [「lang」]和th erefore無法打開文件,但是在刷新頁面後,它加載得很好。 我想知道我做錯了什麼?

+2

考慮對'$ _COOKIE [「lang」]'進行一些驗證,然後將其放入'include'語句中以避免[路徑遍歷攻擊](https://www.owasp.org/index.php/Path_Traversal )。 – 2012-06-02 21:41:38

+0

@Phoenix +1,謝謝你的提示 –

回答

2

只有在您提出請求時纔會設置cookie。

這就是它的工作原理(它隨每個請求發送)。而且由於你仍然處於同一個請求中,所以它根本就不存在。

但是你可以設置你自己:

if (isset($_GET['lang']) && $_GET['lang'] != "") { 
    $_COOKIE['lang'] = $lang; 
    setcookie("lang", $lang, time()+360*360*3600); 
} elseif ... 

那也許你正在尋找的變通。

+0

好的非常感謝... –