2010-02-08 3 views
3

Я создал этот простой скрипт, который либо установит файл cookie с тремя значениями, либо загрузит значения cookie, если они уже установлены. На моем сервере с PHP4 все работает. На моем сервере с PHP 5 (5.2.11) скрипт не может установить cookie в браузере. Я уже проверял, включена ли буферизация вывода в моем php.ini, и это так. У кого-нибудь есть идеи относительно того, почему это не работает?php setcookie не работает под php5

<?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>"; 
?> 

ответ

2

Вы должны установить 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

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

+0

Не добавлять комментарии, как новые ответы. Вместо этого напишите комментарии к ответам. Что такое сообщение об ошибке? У вас есть пробелы перед открытием тега

+0

Нет пробелов перед тегом

+0

Я просто удалил исходный файл и скопировал и вставил код в новый файл в nano в терминале. Он все еще не может установить cookie. –

0

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

Пример:

<?php 
    ob_start(); 
    echo '<p>Initializing…</p>'; 
    setcookie('myLanguage', 'PHP'); 
    ob_end_flush(); 
    // you can continue your PHP code here… 
?>

0

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

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

Это устанавливает куки, но Chrome падает печенье в один клик:

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

Это устанавливает куки и браузер сохраняет его:

setcookie('uname', 'Joe', time()+3600*24, '/', 'www.domain.com', false, false);