php setcookie не работает под php5 - PullRequest
3 голосов
/ 08 февраля 2010

Я создал этот простой скрипт, который либо устанавливает 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>";
?>

Ответы [ 4 ]

2 голосов
/ 08 февраля 2010

Вы должны установить 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>";
?>
0 голосов
/ 21 июля 2013

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

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

Устанавливает cookie, но Chrome сбрасывает cookie в один клик:

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

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

setcookie('uname', 'Joe', time()+3600*24, '/', 'www.domain.com', false, false);
0 голосов
/ 28 января 2011

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

Пример:

<?php</code>
    ob_start();
    echo 'Initializing…';
    setcookie('myLanguage', 'PHP');
    ob_end_flush();
    // you can continue your PHP code here…
?>
0 голосов
/ 08 февраля 2010

Это работало на моем старом сервере PHP4, но не на PHP5.

...