php setcookie не работает под php5

Я создал этот простой скрипт, который либо устанавливает файл cookie с тремя значениями, либо извлекает значения файлов cookie, если они уже установлены. На моем сервере с PHP4 все работает. На моем сервере с PHP 5 (5.2.11) скрипту не удается установить cookie в браузере. Я уже проверил, включена ли буферизация вывода в моем 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)


Вы должны установить файл cookie перед любым выводом в браузер. Попробуйте переместить все строки 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, если нет пробелов или других символов. - person Tomas Markauskas; 08.02.2010
comment
Без пробелов перед тегом ‹?php - person ; 08.02.2010
comment
Я просто удалил исходный файл, скопировал и вставил код в новый файл в nano в терминале. По-прежнему не удается установить файл cookie. - person ; 08.02.2010

Используйте буферизацию выводаob_start() и ob_end_flush().

Пример:

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

person nyuszika7h    schedule 28.01.2011

У меня была аналогичная проблема, но файлы cookie исчезли только в Chrome. Файрфокс был в порядке.

Установка всех параметров в функции setcookie исправила это.

Это устанавливает файл cookie, но Chrome удаляет файл cookie одним щелчком мыши:

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

Это устанавливает файл cookie, и браузер сохраняет его:

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