Les cookies CakePHP ne persistent pas après la fermeture du navigateur

Je suis en train de quitter Apache en faveur de nginx en raison de la faible consommation de ressources. J’ai installé une boîte de serveur Ubuntu avec la stack LEMP installée. Après avoir déplacé toutes mes applications (3 applications CakePHP 2.0.5, 1 installation WordPress), tout semble fonctionner parfaitement, sauf une chose: les cookies de Cake disparaissent soudainement lorsque le navigateur est fermé.

J’ai créé une page de test PHP très simple pour tester si les cookies fonctionnent et ils fonctionnent, mais pas dans Cake. WordPress n’a pas non plus de problèmes pour me rappeler quand je ferme mon navigateur.

En utilisant les outils de développement Chrome, j’ai inspecté pour voir si le cookie est en train d’être configuré, et c’est comme vous pouvez le voir ci-dessous:

Cookies en cours de réglage

La date d’expiration est même fixée à un mois dans le futur, donc je ne comprends pas pourquoi ils ne vivent pas après la fermeture du navigateur. Dès que je lance mon navigateur et que je navigue vers mon application, le cookie a disparu:

Cookie est parti!

Une chose que j’ai remarquée est que mon application s’exécutant sur Apache, le cookie CAKEPHP vous voyez ci-dessus a la même valeur avant et après la fermeture. Cependant, sur le serveur nginx, ce cookie a une valeur différente chaque fois que je ferme et rouvre mon navigateur.

Je pensais que cela pourrait avoir à faire avec les sessions, donc j’ai vérifié mes parameters de session dans core.php et il est configuré pour permettre à PHP de gérer la session:

 Configure::write('Session', array( 'defaults' => 'php' )); 

J’ai vérifié mon /tmp et les fichiers de session sont en cours de création. J’ai essayé de changer le gestionnaire de session pour que Cake stocke les sessions dans son app/tmp/sessions , et pendant que les sessions seraient créées avec succès dans ce répertoire, mes cookies sont toujours perdus à la fermeture du navigateur.

Quelqu’un a-t-il déjà eu ce comportement entre nginx et Cake ou avez-vous des idées pour expliquer ce phénomène?

Le problème est lié aux cookies cryptés et au patch Suhosin. Apparemment, Suhosin ignore les mt_srand() et srand() que vous effectuez et initialise le randomiseur lui-même [ voir ici ]. Cake s’appuyant sur ces fonctions, il interférait avec mes cookies cryptés. Pour y remédier, j’ai ajouté ces deux lignes à mon fichier php.ini et redémarré le serveur (notez que le simple redémarrage de nginx ne fonctionnait pas):

 suhosin.srand.ignore = Off suhosin.mt_srand.ignore = Off