Voici une fonction qui permet de générer un token :
function getToken() {
return hash('sha256', uniqid() . rand());
}
echo getToken();
C'est basique mais il n'y pas besoin de plus. Une fois généré, il faut le stocker. Si tu ne souhaites pas garder l'historique des tokens, tu peux avoir une table users comme celle-ci :
CREATE TABLE users (
id INT(11) PRIMARY KEY,
login VARCHAR(20),
password VARCHAR(255),
token VARCHAR(255),
token_expire_at DATETIME
);
Ainsi, quand un utilisateur s'authentifie avec son login/mot de passe, tu génères un token ainsi qu'une date de fin d'expiration (par exemple heure courante + 24 heures).
Pour que le système soit sécurisé, ce token doit être envoyé crypté (par exemple via HTTPS). Le client stocke le token sur son poste (par exemple via cookie crypté).
Dès que l'utilisateur envoie une requête (AJAX ou pas), il envoie également une valeur de hash calculée grâce à ce token et la requête.
Dans ton cas, on peut imaginer quelques fonctions JS qui calculent ce hash (pseudo code jquery) :
[javascript]
function sendSecuredAjax(url, datas) {
token = getCookie('token'); // Cookie à crypter
user = getCookie('user'); // Nom d'utilisateur, cookie à crypter
$.ajax(url + getHash(token, url, user), {
type : 'POST', // Données passées en POST mais token en GET
data : datas
});
}
function getHash(token, url, user) {
// Exemple d'implémentation en JS de SHA1
//
http://www.webtoolkit.info/javascript-sha1.html
return '?hash=' + SHA1(token + url) + '&user=' + user;
}
// Fonction Site du zéro
function getCookie(sName) {
var oRegex = new RegExp("(?:; )?" + sName + "=([^;]*);?");
if (oRegex.test(document.cookie)) {
return decodeURIComponent(RegExp["$1"]);
} else {
return null;
}
}
[/javascript]
Et coté serveur, lors de la réception de la requête, il suffit de comparer le hash de la requête avec le hash calculé grâce à l'utilisateur, le token stocké dans la table et l'URI de la requête.
Bon courage.