Page 1 sur 1

Maj sessions et callbaks

Posté : 21 oct. 2013, 17:08
par jinx
Bonjour à tous,

Je suis entrain d'installer un système de paiement sur mon site web, et j'ai quelques difficultés avec la session.
En effet, après avoir effectué le paiement, j'affiche une modal d'attente. En même temps, un appel ajax lance un script qui vérifie la session.
Ce script vérifie la session toutes les secondes pendant une minute.

A la réception de la validation de paiement, le callback, la mise à jour de la session est effectuée.
session_destroy();
session_id(ID_SESSION_RECUPERE); // envoyé avec mon paiement et récupéré avec ce callback
session_start();
//maj session
$_SESSION['paiement'] = 1;
session_write_close(); // testé avec, et sans, même problème
session_destroy();
Le problème est que mon script ne voit pas cette mise à jour.

Si je met un sleep() de quelques secondes dans la reception du callback, avant la mise à jour de la session, cela marche.

Y'a t'il un lock de la session ? Pourquoi un sleep() arrange le problème ? N'y a t'il pas une solution plus adéquate ?

Merci pour vos réponses.

Re: Maj sessions et callbaks

Posté : 21 oct. 2013, 18:55
par moogli
salut,

quel est l’intérêt de créer une session pour la détruire juste ensuite ?

sinon en dehors de cela, le premier A de ajax c'est pour asynchrone donc tu ne peux pas gérer ainsi des infos corrélées.

ce que tu doit faire c'est (en JS) :
- afficher la modale d'attente
- effectuer la demande de paiement et attendre le retour (donc une seule requête ajax).
- lorsque tu as le retour seconde requête ajax si ce n'est un script à toi qui gère le paiement, sinon ton script met a jour la session
- fermer la modale.

tu réalise ainsi le paiement pendant que l'utilisateur à son image / message d'attente.

@+

Re: Maj sessions et callbaks

Posté : 22 oct. 2013, 09:05
par jinx
Bonjour, merci pour ta réponse !

Je m'explique :
Le client effectue son paiement via une modale qui appartient au prestataire.
Celui-ci répond que le paiement est en cours (étape A) ce qui me permet d'afficher ma modale d'attente.
Ici, j'enregistre l'id de transaction, ainsi que le session_id afin de procéder plus tard à la mise à jour.

Le prestataire appelle ensuite une de mes pages afin de confirmer le paiement (étape B).
Dans cette page, je n'ai pas accès à la session du client. Je la récupère à l'aide du session_id enregistré (via l'id de transaction qui est aussi envoyé ici).

Si je lance qu'une seule requête ajax à l'étape A, et que le retour de mon paiement n'est pas encore arrivé, je ne vais pas savoir que le paiement s'est bien passé.
D’où le fait que j'interroge plusieurs fois la session.

Sans le session_destroy(), je n'ai pas accès à la session du client via son session_id, ça me crée une session vide.

Voilà !