2015-04-04 116 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