Les requêtes AJAX conservent-elles les informations de Session PHP?

si j'avais un utilisateur connecté sur mon site, ayant son id stocké dans $_SESSION , et à partir de son navigateur, il a cliqué sur un bouton "Enregistrer" qui ferait une demande AJAX au serveur. Est-ce que son $_SESSION et les cookies seront conservés dans cette demande, et puis-je compter en toute sécurité sur l'id présent dans le $_SESSION ?

144
demandé sur Click Upvote 2009-03-24 13:39:58

7 réponses

la réponse est oui:

Les Sessions

sont maintenues côté serveur. En ce qui concerne le serveur, il n'y a pas de différence entre une requête AJAX et une requête de page régulière. Ce sont des requêtes HTTP, et elles contiennent toutes les deux des informations de cookie dans l'en-tête de la même manière.

du côté client, les mêmes cookies seront toujours envoyés au serveur que ce soit une requête régulière ou une requête AJAX. Le code Javascript n'a pas besoin de faire quelque chose de spécial ou même pour être au courant de ce qui se passe, cela fonctionne tout simplement comme il le fait avec les demandes régulières.

175
répondu thomasrutter 2012-11-20 03:50:42

ce que vous voulez vraiment dire c'est: Est-ce que les cookies sont envoyés avec la demande AJAX? En supposant que la requête AJAX porte sur le même domaine (ou dans les limites des contraintes de domaine du cookie), la réponse est oui. Ainsi, les requêtes AJAX renvoyant vers le même serveur conservent les mêmes informations de session (en supposant que les scripts appelés émettent un session_start() comme tout autre script PHP voulant accéder aux informations de session).

23
répondu cletus 2009-03-24 10:44:45

si le fichier PHP des requêtes AJAX a un session_start() les informations de session seront conservées. (lui montrant les demandes sont dans le même domaine)

21
répondu Ólafur Waage 2009-03-24 10:44:26

enfin, pas toujours. utiliser des cookies, vous êtes bon. Mais le "puis-je compter en toute sécurité sur la présence de l'id" m'a demandé d'étendre la discussion avec un point important (principalement à titre de référence, car le nombre de visiteurs de cette page semble assez élevé).

PHP peut être configuré pour maintenir des sessions par URL-rewriting, au lieu de cookies. ( Comment c'est bon ou mauvais (<-- voir, par exemple, le premier commentaire ici) est une question séparée , nous allons maintenant nous en tenir à celle actuelle, avec juste un côté-note: le problème le plus important avec les sessions basées sur URL-la visibilité flagrante de l'ID de session nue-n'est pas un problème avec les appels Ajax internes; mais alors, si elle est allumée pour Ajax, il est allumé pour le reste du site, aussi, donc là...)

dans le cas de sessions de réécriture D'URL (sans Cookie), les appels Ajax doivent prendre soin de c'est eux-mêmes que leurs URL de requête sont correctement conçues. (Ou vous pouvez lancer votre propre solution personnalisée. Vous pouvez même recourir au maintien des sessions côté client , dans des cas moins exigeants.) Le point est la explicite de soins nécessaire pour la continuité de session, si ce n'est l'utilisation de cookies:

  1. Si les appels Ajax juste extrait de Url de procès-verbaux du HTML (tel que reçu de PHP), cela devrait être OK, car ils sont déjà cuits (umm, cookified).

  2. S'ils ont besoin de assembler Demander URIs eux-mêmes, l'ID de session doit être ajouté à L'URL manuellement. (Cochez ici , ou la page sources générée par PHP ( avec URL-rewriting sur ) pour voir comment faire.)


à partir de OWASP.org :

effectivement, l'application web peut utiliser les deux mécanismes, les cookies ou Paramètres D'URL, ou même passer de l'un à l'autre (URL automatique réécriture) si certaines conditions sont remplies (par exemple, l'existence des clients web sans cookies ou lorsque les cookies ne sont pas en raison de la confidentialité de l'utilisateur).

D'un Ruby-forum post:

lorsque vous utilisez php avec des cookies, l'ID de session sera automatiquement envoyé dans les en-têtes de requête, même pour les requêtes Ajax Xmlhttprequests. si vous utiliser ou Autoriser des sessions php basées sur les URLs, vous devrez ajouter l'id de session à chaque url de requête Ajax.

8
répondu Sz. 2017-05-23 12:26:06

il est très important que les requêtes AJAX conservent la session. L'exemple le plus simple est lorsque vous essayez de faire une requête AJAX pour le panneau d'administration, disons. Bien sûr que vous protégerez la page à laquelle vous faites la demande, et non pas accessible par d'autres qui n'ont pas la session que vous obtenez après l'ouverture de session de l'administrateur. Du sens?

3
répondu Bogdan Constantinescu 2009-03-24 11:08:30

une chose à surveiller cependant, surtout si vous utilisez un framework, est de vérifier si l'application régénère les ID de session entre les requêtes - Tout ce qui dépend explicitement de l'id de session rencontrera des problèmes, bien qu'évidemment le reste des données de la session ne sera pas affecté.

si l'application est en train de régénérer des identifiants de session comme celui-ci, alors vous pouvez vous retrouver avec une situation où une requête ajax invalide / remplace ID de session dans la page de demande.

0
répondu John 2009-03-24 11:20:46

C'est ce que font les frameworks, par exemple si vous initialisez la session dans le Controller Front ou le script boostrap, vous n'aurez pas à vous soucier de son initalisation que ce soit pour les controllers de page ou les controllers ajax. Les cadres PHP ne sont pas une panacée, mais ils font tellement de choses utiles comme ça!

0
répondu AlexA 2009-12-06 10:12:32