2010-09-17 3 views
2

J'ai mis les cookies régulièrement dans une page de rappel dans mon application Twitter. Tout fonctionne bien. Maintenant, en utilisant jQuery, je soumets un formulaire, et la fonction de rappel active un script PHP. Ce script n'a besoin que d'un cookie pour les valeurs sérialisées de $ _POST; et les valeurs s'exécutent bien (à la fois sérialisé et normal, je leur ai fait écho pour déboguer). L'heure d'expiration est définie sur 1 an à l'avance. Mais pour une raison quelconque, le cookie n'apparaitra nulle part. Voici le code:Setcookie ne fonctionne pas?

// js/main.js 
$('#settings-form').live('submit', function() { 
    $.post('controllers/settings.php', $(this).serialize(), function(data) { // Everything here works. 
     if (data == 'OK') // no errors spits out "OK". this works 
      changeView({'msg': 'Your settings were saved successfully.'}); // This just resets the view and adds a message div at the top. This works 
     else 
      changeView({'msg': data}); // This echoes the error if any exists. Doesn't happen, no errors arise 
    }); 
    return false; // Cancels redirecting after submitting form 
}); 
// controllers/settings.php 
setcookie('user_settings', serialize($_POST), strtotime('+1 year')); 

J'ai vérifié toutes les variables et j'ai même essayé de placer les factices pour le test (comme « boo » au lieu de serialize ($ _ POST) pour une raison qui ne fonctionne pas..

J'ai essayé de faire un chdir ('..'), pour que le cookie dir soit au bon endroit, mais ça ne semble pas être le problème, en vérifiant les cookies dans mon navigateur ne semble pas fonctionner du tout, pour n'importe quel chemin.Il ne fonctionne tout simplement pas.J'ai aussi essayé de changer manuellement le domaine et le chemin, mais ceux qui ne fonctionnent pas non plus.

Répondre

2

Tout d'abord, la chose chdir() est un rouge-hareng - Les cookies sont spécifiques au domaine; le chemin du répertoire n'a aucune incidence sur eux.

Les cookies peuvent fonctionner un peu étrangement lorsque vous effectuez des appels de type AJAX, et je pense que c'est ce que vous voyez - Le serveur configure probablement le cookie, mais le navigateur peut ne pas le configurer dans les cookies les données car ce n'est pas un chargement de page.

Je suggérerais que vous feriez mieux d'utiliser la gestion de session de PHP plutôt que des cookies; c'est mieux pour la sécurité, moins de bande passante (parce que l'ensemble des données du cookie est transmis dans les deux sens à chaque requête http), et plus de chances de fonctionner.

Si vous voulez vraiment utiliser des cookies, cela peut fonctionner mieux si vous utilisez Javascript pour le faire. Vous pouvez définir des cookies dans votre code javascript en accédant à document.cookie. (vous devez obtenir la syntaxe correcte pour la chaîne de cookie, mais JQuery a probablement ses propres fonctions qui les rendent plus faciles à utiliser)

+0

Très bien, ce que j'ai fait était de combiner les deux - utilisé JS pour définir le cookie mais PHP pour obtenir la bonne valeur afin que je puisse l'utiliser facilement. Merci! Dommage que je devais contourner JS cependant. – casraf