Sajax et les Cookies

Bonjour à tous, aujourd’hui je vous propose deux « hacks » pour Sajax (Simple Ajax Toolkit).

Un problème se pose lors de l’utilisation d’un script appelé via une XMLHttpRequest de Sajax (requêtes dites « asynchrones ») qui exécute un enregistrement de cookie :

function vote_cookie($id) {
	setcookie("MonCookie", $id, time() + 86400);
}

Dans notre cas, impossible de faire marcher ce script car à chaque appel nous avons droit à cette erreur :

Warning:  Cannot modify header information - headers already sent...

Ce problème viens du script Sajax qui renvoie le caractère « + » avant d’afficher le résultat du script.
Je m’explique, pour paramétrer un Cookie, il faut que ça soit le première chose envoyée au client car les Cookies font parti de l’en-tête.

exemple d’en-tête :

Host	www.bisiere.fr
User-Agent	Mozilla/5.0 (Windows; U; Windows NT 6.0; fr; rv:1.9.0.1) Gecko/2008070208 Firefox/3.0.1
Accept	text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language	fr,fr-fr;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding	gzip,deflate
Accept-Charset	ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive	300
Connection	keep-alive
Referer	http://www.bisiere.fr/index.php
Cookie	MonCookie=12

Alors comment régler ce problème, et bien tout simplement dans le fichier Sajax.php trouver ce bout de code :

	echo "+:";
	$result = call_user_func_array($func_name, $args);
	echo "var res = " . trim(sajax_get_js_repr($result)) . "; res;";

et remplacer le par :

	$result = call_user_func_array($func_name, $args);
        echo "+:";
	echo "var res = " . trim(sajax_get_js_repr($result)) . "; res;";

Ainsi vos fonctions seront appelées et exécutée avant que des informations (autre que l’en-tête) ne soient envoyées au client.
Problème réglé 😀 !

Trop facile Sajax ! mais comment l’utiliser tout en gardant mes règles d’URL Rewritting ? la réponse ici

Liens utiles :