PHP setcookie()问题

时间:2015-04-04 15:36:41

标签: php cookies

我在10年内没有做过饼干。我有一个简单的php登录脚本,它根据MySQL数据库中的值检查用户名和密码。如果成功,我创建我设置一个cookie ...尝试,无论如何。

我可以让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
    }
}

1 个答案:

答案 0 :(得分:0)

$_COOKIE superglobal仅保存客户端在请求的Cookie:标头中发送的cookie。 setcookie()不会更改它,它只会设置将在响应的Set-Cookie:标题中发送的内容。

BTW,你似乎用作会话标识符是非常不安全的。不仅不保证它是独一无二的,而且非常容易预测/欺骗。