Je construis une application AngularJs en utilisant joomla en arrière-plan. L'application AngularJs est chargée une fois, puis appelle le serveur toujours via ajax. Certains appels sont simultanés. Si j'utilise la session PHP par défaut) dans ces appels, php ne traitera qu'un appel à la fois. J'ai donc écrit mon propre gestionnaire de session pour autoriser plus d'un appel à la fois et j'ai J'aimerais utiliser cela à la place de la session php par défaut. Y a-t-il un moyen simple de faire cela dans Joomla ou je devrai écrire ma propre classe JSession?
Modifier
<?php
session_start();
sleep(10);
echo "Hello";
?>
Si vous appelez ce fichier deux fois dans le même navigateur dans le même temps, le premier appel sera rétabli dans 10 secondes et le deuxième appel dans 20 secondes. La classe JSession appelle la session_start (), de sorte que le joomla a le même comportement.
Modifier
Lorsque nous utilisons l'option de base de données ou étendons le JSessionStorage avec son propre gestionnaire de session, joomla utilise session_set_save_handler()
et modifie le comportement par défaut du verrouillage de la session. Donc, je me suis trompé quand je dis qu'appeler session_start implique de verrouiller la session.
Vous n'avez pas besoin d'écrire votre propre classe JSession, mais vous aurez besoin d'écrire une classe qui étend JSessionStorage
pour s'intégrer à la gestion de session de Joomla.
Vous rencontrerez probablement des problèmes lorsque vous essayez de définir le gestionnaire de session via la configuration globale. Remplacez JFormFieldSessionHandler
par une version incluant votre gestionnaire ou spécifiez-la manuellement dans configuration.php
. Cependant, cette dernière option signifie que vous pouvez rencontrer des problèmes lorsque vous essayez d'utiliser la configuration globale à l'avenir.
Edit: Il semble que la réponse ne soit pas correcte.
Le gestionnaire de session Joomla (base de données) par défaut ne verrouille pas la session pendant le traitement. Donc, vous n'avez pas à vous soucier du verrouillage.
Quoi qu'il en soit, il est possible que vous remplaciez les données de session de la première demande par celles de la deuxième demande.
Bienvenue dans le monde des appels asynchrones. Mon conseil est de ne pas utiliser les sessions pour les appels AJAX/RESTful. Le mieux que je puisse faire est d'avoir une sorte de jeton d'authentification pour que vous sachiez qui passe l'appel.
Joomla vous permet de créer de nouveaux serveurs de stockage de session, ce qui peut résoudre votre problème. Étendez simplement JSessionStorage
avec votre classe de session personnalisée, puis vous pourrez définir le gestionnaire directement dans votre fichier configuration.php. (Les processus de stockage de session personnalisés n'apparaissent pas dans la configuration globale de l'administrateur.)