php setcookie се проваля под php5

Създадох този прост скрипт, който или ще зададе бисквитка с три стойности, или ще извлече стойностите на бисквитките, ако вече са зададени. На моя сървър, работещ с PHP4, всичко работи. На моя сървър с PHP 5 (5.2.11) скриптът не успява да зададе бисквитката в браузъра. Вече проверих дали изходното буфериране е активирано в моя php.ini и е. Някой има ли идеи защо това не работи?

<?php 
echo "<!DOCTYPE html>";
echo "<body>";
if (!isset($_COOKIE['taeinv'])) {
    echo "No cookie set...   Attempting to set a new cookie.";
    $user = "testuser";
    $role = "admin";
    $expire = "true";
    $halfHour = 1800;
    setcookie("websitename[Expire]", $expire, time()+$halfHour);
    setcookie("websitename[User]", $user, time()+$halfHour);
    setcookie("websitename[Role]", $role, time()+$halfHour);
}
if (isset($_COOKIE['websitename'])) {
    echo "Cookie Values:";
    echo "<br />";
        foreach ($_COOKIE['websitename'] as $name => $value) {
            echo "<b>$name</b> : $value <br />\n";
        }
}
echo "<br />";
echo "<a href=logout.php>Logout</a>";
echo "</body>";
echo "</html>";
?>

person Brandon C    schedule 08.02.2010    source източник


Отговори (4)


Трябва да зададете бисквитката преди каквото и да е извеждане към браузъра. Опитайте да преместите всички echo линии някъде под setcookie извикването. Бихте могли да направите нещо подобно:

<?php
$set = false;
if (!isset($_COOKIE['taeinv'])) {
    $set = true;
    $user = "testuser";
    $role = "admin";
    $expire = "true";
    $halfHour = 1800;
    setcookie("websitename[Expire]", $expire, time()+$halfHour);
    setcookie("websitename[User]", $user, time()+$halfHour);
    setcookie("websitename[Role]", $role, time()+$halfHour);

}
echo "<!DOCTYPE html>";
echo "<body>";
if ($set) {
    echo "No cookie set...   Attempted to set a new cookie.";
}
if (isset($_COOKIE['websitename'])) {
    echo "Cookie Values:";
    echo "<br />";
        foreach ($_COOKIE['websitename'] as $name => $value) {
            echo "<b>$name</b> : $value <br />\n";
        }
}
echo "<br />";
echo "<a href=logout.php>Logout</a>";
echo "</body>";
echo "</html>";
?>
person Tomas Markauskas    schedule 08.02.2010

Това работи на стария ми PHP4 сървър, но не и на PHP5.

person Community    schedule 08.02.2010
comment
Не добавяйте коментари като нови отговори. Вместо това пишете коментари към отговорите. Какво е съобщението за грешка? Имате ли интервали преди отварящия маркер <?php? Може също така да имате невидим UTF-8 BOM, ако няма интервали или други символи. - person Tomas Markauskas; 08.02.2010
comment
Без интервали преди тага ‹?php - person ; 08.02.2010
comment
Току-що премахнах оригиналния файл и копирах и поставих кода в нов файл в nano в терминала. Все още не успява да настрои бисквитката. - person ; 08.02.2010

Използвайте буфериране на изходob_start() и ob_end_flush().

Пример:

<?php ob_start(); echo '<p>Инициализиране…</p>';  setcookie('myLanguage', 'PHP');  ob_end_flush(); // можете да продължите своя PHP код тук… ?>

person nyuszika7h    schedule 28.01.2011

Имах подобен проблем, но само в Chrome бисквитките изчезнаха. Firefox беше наред.

Задаването на всички параметри във функцията setcookie го поправи.

Това задава бисквитката, но Chrome пуска бисквитката с едно кликване:

setcookie('uname', 'Joe', time()+3600*24);

Това задава бисквитката и браузърът я запазва:

setcookie('uname', 'Joe', time()+3600*24, '/', 'www.domain.com', false, false);
person Charles Jaimet    schedule 21.07.2013