2010-12-13 63 views
1

Note: Cette question est déjà résolu, finalement je trouve que ce n'est pas les cookies problème, le problème est sur fonction unserialize(). Le cookie sérialisé qui est le paramètre de cette fonction doit d'abord être striplash-ed en premier.PHP Cookies fonctionne bien sur localhost, mais il ne fonctionne pas sur le serveur en direct

Bonjour, j'ai un problème avec les cookies PHP. J'utilise des cookies PHP pour enregistrer les préférences de l'utilisateur. J'ai testé mon code sur ma machine locale (localhost en utilisant XAMPP). Tout fonctionne très bien, y compris les cookies. Mais quand je l'ai téléchargé sur le serveur live, les cookies ne fonctionnent pas du tout. Il semble que la fonction setcookie() n'écrit pas la valeur du cookie. J'ai testé en répercutant la valeur de cookie à la fois sur mon localhost et sur mon serveur live. La valeur $ _COOKIE [] sur localhost est affichée mais pas avec celle du serveur live.

Je pensais que c'est peut-être lié au fuseau horaire $ expire comme celui-ci dans ce poste http://anupraj.com.np/index.php/php-cookies-not-working-php-cookie-tutorial-and-scirpt/14. Mais ensuite j'ai réalisé que j'avais mis les cookies à expiration dans 1 mois, pas seulement dans une heure comme sur ce blog. Donc je pense que ce n'est pas le cas.

Ceci est le contenu de setting.php

<?php 
$defaultSettings['default_post_to'] = 'both'; 
$defaultSettings['timesince_style'] = 'simplify'; 
... 
$defaultSettings['display_geo_info'] = 'true'; 
$defaultSettings['enable_javascript'] = 'true'; 

if(!isset($_COOKIE['settings'])){ 
    setcookie("settings", serialize($defaultSettings), time()+3600*24*30); 
    header('Location: index.php'); 
} 
$setting = unserialize($_COOKIE['settings']); 
?> 

Et c'est le contenu de index.php

<?php 
/* 
ini_set ("display_errors", "1"); 
error_reporting(E_ALL); 
*/ 

session_start(); 

require_once("settings.php"); // Settings files 
require_once('varlib.php'); // Get all possible passed variable 
require_once('auth.php'); // Check for channel login status 

// If inputbar form submitted 
if($_POST['inputbox']){ 
... 
} 
else{ 
    echo "SETTING COOKIE: <br/><br/>"; 
    // This print_r is only showing the $_COOKIE value (which is stored on $setting) on localhost but no on live server 
     print_r($setting); 
    switch($com){ 
     ... 
    } 
} 
?> 

J'ai une recherche à ce sujet partout (Google, stackoverflow, demander à des amis sur twiiter/FB) toujours pas de solutions

J'espère que certains corps pourraient me donner la solution ici Merci :)

+0

Avez-vous essayé les paramètres de chemin et domaine de setcookie()? – rik

+0

Si vous activez error_reporting, vous n'obtenez aucun message d'erreur? –

+0

@Kamal: comparez la sortie 'phpinfo()' du serveur local et local pour la partie 'session' (où les paramètres de cookie sont également affichés). – stealthyninja

Répondre

0

Essayez ceci:

setcookie("settings", serialize($defaultSettings), time()+3600*24*30, '/'); // added path 

Aussi, pourrait-il que serialize($defaultSettings) résultat est trop grand?

+0

Hey, merci pour votre idée. J'ai trouvé qu'il semble que le problème concerne la fonction serialize()/unserialize(). La fonction serialize a fonctionné, mais la fonction unserialize() semble ne rien retourner. Est-ce vraiment parce que c'est trop grand? – Kamal

+0

La taille du cookie est généralement limitée à 4 Ko –

1

Regardez les paramètres path et domain pour la fonction setcookie. Référence: setCookie @ docs PHP http://php.net/manual/en/function.setcookie.php

Essayez ceci pour définir votre cookie:

if ($on_localhost) { // change this 
    $domain = '.localhost'; 
} else { 
    $domain = '.webhoster.com'; // change this 
} 
setcookie(
    'settings', 
    serialize($defaultSettings), 
    time()+3600*24*30, 
    '/',   // this is the path 
    $domain  // this is the domain 
); 

Bonne chance!

0

Essayez exit() après l'en-tête Location. Un en-tête d'emplacement n'empêche pas un script PHP d'exécuter d'autres instructions, peut-être que quelque chose est exécuté après l'en-tête qui provoque le comportement incorrect.

0

Probablement que l'heure de votre serveur n'est pas correcte, Cookeis ne fonctionne pas sur le serveur.

Essayez ceci:

setcookie("settings", serialize($defaultSettings), 0); 

Réglage expiration à zéro résoudre votre problème dans ce cas. ou mettez à jour l'heure de votre serveur.

0

Tout en appliquant des solutions, nous avons oublié la base des cookies.

Les cookies sont comme des en-têtes. Comme les en-têtes, il devrait être envoyé avant que toute sortie génère. alors seulement il définit avec succès. J'ai beaucoup lutté pour ce problème, mais quand je suis passé par les bases ce problème a été résolu rapidement.

cette syntaxe sera suffisant pour résoudre ce problème ...

setcookie(
'settings', 
serialize($defaultSettings), 
time()+3600*24*30, 
'/'   // this is the path 
);