php setcookie()在实时服务器上不起作用,但在本地主机上起作用

时间:2019-12-06 07:07:11

标签: php cookies http-headers

我收到此错误:

  

第35行的脚本'/ home / path / to / file / php'中发生错误:无法修改标头信息-已发送的标头(输出始于/ home / path / to / file / to / header。 html:7)

我知道尝试设置Cookie时遇到错误,并且我知道setcookie之前没有任何输出...问题在那里,我必须为数据库添加包含文件连接和文件重定向。因此,我在包含文件之后添加了 setcookie 。我也尝试将 setcookie 放在包含文件上方,但这也无济于事。

我的代码

<?php # Script 2.5 - main.inc.php 2 3        

// Redirect if this page was accessed directly:     
if (!defined('BASE_URL')) {       

// Need the BASE_URL, defined in the config file:       
require('../includes/config.inc.php');       

// Redirect to the index page:       
$url = BASE_URL . 'index.php?p=vote';      
header ("Location: $url");       
exit;    

}   

$vote = new Vote;
//get vote and options data
$voteData = $vote->getVotes();


//if vote is submitted
if(isset($_POST['voteSubmit'])){
$votesData = array(
    'vote_id' => $_POST['voteID'],
    'vote_option_id' => $_POST['voteOpt']
);
//insert vote data
$voteSubmit = $vote->vote($votesData);
if($voteSubmit){
    //store in $_COOKIE to signify the user has voted
    setcookie($_POST['voteID'], 1, time()+60*60*24*365); //Error Occurs here

    $statusMsg = 'Your vote has been submitted successfully.';
}else{
    $statusMsg = 'You cannot vote more than once.';
}


}
?>

//The html form code goes here

我也尝试过

setcookie($_POST['voteID'], 1, time()+60*60*24*365, '\');

setcookie($_POST['voteID'], 1, time()+60*60*24*365, '\', domainName);

但是这些也不能解决我的问题。

我还创建了一个名为 test.php 的新文件,并测试了以下代码。

<?php 

    $cookie = 'test';
    $cookie_name = "cookieName";
    $cookie_value = $cookie;
    setcookie($cookie_name, $cookie_value, time() + (86400 * 365));

    if((isset($_COOKIE[$cookie_name])) && ($_COOKIE[$cookie_name] != "")) {
     echo 'yes';
    }
    else{
     echo 'no';
    }

    phpinfo();

?>

它显示

当我在主php文件中尝试使用相同的代码时,它显示错误并打印出yes。我不知道我的代码有什么问题。

我也尝试过谷歌搜索,但没有任何运气。

1 个答案:

答案 0 :(得分:0)

您可以在php.ini中使用output_buffering。因为标头已经发送到上方,您需要先保留输出,然后再将其发送到客户端。