2015-04-04 87 views
1

我沒有在10年內完成cookies。我有一個簡單的php登錄腳本,它根據MySQL數據庫中的值檢查用戶名和密碼。如果成功了,我創建了我設置的cookie ...嘗試,無論如何。PHP setcookie()問題

我可以得到setcookie()返回true,但沒有設置cookie。我大部分時間都意識到這是B/C頭文件已被髮送。編輯:headers_sent()返回false,所以這不是問題。

會話代碼(不要與一個PHP會話()相混淆):

function create_session(&$user_id, &$ip, &$proxy_ip) 
{ 
    global $mysqli_auc; 

    $hash = md5($_SERVER['REMOTE_ADDR'] . $_SERVER['HTTP_USER_AGENT']); 
    $query = "INSERT INTO user_sessions(user_id,ip,proxy_ip,session_hash) 
      VALUES('$user_id','$ip','$proxy_ip','$hash')"; 
    $result = $mysqli_auc->query($query); 

    $already_sent = "false"; 
    if (headers_sent()) { 
     $already_sent = "true"; 
    } 

    // print "This definitely sends headers"; 
    if (!setcookie("my_hash",$hash,time()+2000)) { 
     print "Unable to set cookie.<br>"; 
    } else { 
     print "Set cookie. " . $_COOKIE['my_hash'] . "<br>"; // blank 
     print "Should be " . $hash . "<br>"; // this holds an md5 hash string 
     print "Headers sent " . $already_sent "<br>"; // false 
    } 
} 
+3

Cookie不會立即出現在當前調用'$ _COOKIE'中,而是在下一次HTTP往返之後。 – mario 2015-04-04 15:42:49

+0

謝謝。不過,值得一提的是,我正在檢查我的瀏覽器,他們不在那裏。肯定是一個錯誤,因爲它現在在那裏。謝謝。不確定它是否有資格作爲答案,但如果您將它作爲一個整體提供,我會接受它! – 2015-04-04 16:07:02

回答

0

$_COOKIE超全局僅保持由客戶端在請求的Cookie:標頭中發送的cookie。 setcookie()不會更改它,它只設置將在響應的Set-Cookie:標頭中發送的內容。

順便說一句,你似乎用作會話標識符是非常不安全的。不僅不保證它是唯一的,而且很容易預測/欺騙。

+0

我只是現在做一些測試。一旦我接近發佈,我會使用更安全的東西。 – 2015-04-04 18:39:15