2010-02-08 7 views
3

J'ai créé ce script simple qui va soit définir un cookie avec trois valeurs ou récupérer les valeurs de cookies si elles sont déjà définies. Sur mon serveur exécutant PHP4, tout fonctionne. Sur mon serveur avec PHP 5 (5.2.11), le script ne parvient pas à définir le cookie dans le navigateur. J'ai déjà vérifié si la mise en mémoire tampon de sortie est activée dans mon php.ini et c'est le cas. Quelqu'un at-il des idées sur les raisons pour lesquelles cela ne fonctionne pas?php setcookie échoue sous 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>"; 
?> 

Répondre

2

Vous devez définir le cookie avant toute sortie dans le navigateur. Essayez de déplacer toutes les lignes echo quelque part sous l'appel setcookie. Vous pouvez faire quelque chose comme ceci:

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

Cela a fonctionné sur mon ancien serveur PHP4, mais pas sur PHP5.

+0

Ne pas ajouter de commentaires que de nouvelles réponses. Au lieu de cela, écrivez des commentaires aux réponses. Quel est le message d'erreur? Avez-vous des espaces avant l'ouverture de la balise

+0

Aucun espace avant la balise

+0

Je viens de supprimer le fichier d'origine et de copier et coller le code dans un nouveau fichier dans nano dans le terminal. Il ne parvient toujours pas à définir le cookie. –

0

Utilisez tampon de sortie - ob_start() et ob_end_flush().

Exemple:

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

0

J'ai eu un problème similaire mais il était seulement dans Chrome que les biscuits ont disparu. Firefox allait bien.

La définition de tous les paramètres de la fonction setcookie l'a corrigée.

Ceci définit le cookie, mais Chrome laisse tomber le cookie dans un clic:

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

Ceci définit le cookie et le navigateur conserve il:

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