JeuWeb - Crée ton jeu par navigateur
[Résolu] Les sessions inter-serveur ? Ca marche ? - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : [Résolu] Les sessions inter-serveur ? Ca marche ? (/showthread.php?tid=6791)



[Résolu] Les sessions inter-serveur ? Ca marche ? - xviniette - 29-04-2013

Salut à tous ! Aujourd'hui je me pose une petite question et après quelques recherches je n'ai pas trouvé la réponse. Peut être que la question est trop bête pour être posé, je ne sais pas Confusediffle:.

Pour illustrer ma question je vais essayer de l'expliquer avec un exemple.

Nous avons donc deux serveurs distincts.

Le serveur 1 :
- s1.com/setsession.php?sessvalue=varX : initialise $_SESSION['test'] = $_GET['sessvalue']
- s1.com/getsession.php : echo $_SESSION['test']

Le serveur 2 :
- s2.com/setsessionsurS1.php?sessvalue=varX : appelle s1.com/setsession.php?sessvalue=$_GET['sessvalue']
- s2.com/getsessionsurS1.php récupère la valeur retourné par s1.com/getsession.php

J'ai un peu du mal à comprendre comment fonctionnent les sessions.
Du coup ma question. Si on appelle le s2 pour définir une valeur de session sur s1, et qu'ensuite on appelle s2 pour récupérer la valeur de s1. Est-ce que ça nous retournera le résultat ?

Si non : Pourquoi ?

Si oui : La session est elle liée au serveur 2 (càd que tous les clients qui utiliseront le s2 travailleront avec la même variable de session) ? Ou la session est elle définit pour chaque client distinct ?
J'espère être assez clair :p.

En vous remerciant.


RE: Les sessions inter-serveur ? Ca marche ? - srm - 29-04-2013

La session est lié au serveur.


RE: Les sessions inter-serveur ? Ca marche ? - xviniette - 29-04-2013

Très bien merci ! Ca m'arrange bien du coup !


RE: [Résolu] Les sessions inter-serveur ? Ca marche ? - niahoo - 30-04-2013

pour préciser oxman, la session est stockée sur le serveur donc forcément un autre serveur ne peut pas en avoir connaissance, à moins que les serveurs communiquent entre eux ou stockent les sessions sur une même base de données par exemple.


RE: [Résolu] Les sessions inter-serveur ? Ca marche ? - xviniette - 30-04-2013

Tu n'as pas très bien compris ce que je demandais je crois. C'est ma faute, je ne dois pas être assez explicite.
Du coup je me demande si Oxman a répondu en ayant clairement à ma question.

Ce que je demande n'est pas de savoir si les serveurs se partagent les sessions, mais si le serveur 1 gère une session lorsque que l'on utilise un deuxième serveur pour accéder à ce serveur 1. Et si oui, si la session sera spécifique au serveur 2 ou à tous les clients qui utiliseront le serveur2.

Mais je pense qu'Oxman a bien répondu à la bonne question. En plus ça m'arrange :bave:

Merci pour ta participation.


RE: [Résolu] Les sessions inter-serveur ? Ca marche ? - Xenos - 30-04-2013

Je préciserai quand même (parce que je suis pas certain d'avoir compris ta question...):
  • Les données de la session sont stockée sur le serveur (cela revient à ce qu'Oxman a dit)
  • Le n° de session est envoyé au client
  • Quand le client fait une requête vers un serveur, il envoie le numéro de session qu'il a pour ce serveur
Le 1) implique qu'un serveur ne peut pas connaitre les données de session d'un autre serveur (ou alors, il faut faire un mécanisme explicite, et encore).
Le 2) implique que le n° de session est lancé au client: on ne sait pas forcément si le client le rattappe, et le n° peut très bien être intercepté.
Le 3) implique que toute requête d'un client se voit joindre le n° de session connu du client, donc c'est le client HTTP qui dit au serveur quel n° de session utiliser (et le serveur vérifie, normalement, que ce n° de session existe*).

Donc, si s2 redirige le client C vers s1:
  • C est client de s2, C envoie le n° de session 2 à s2
  • s2 dit au client d'aller sur s1
  • C envoie une requête sur s1, en envoyant donc à s1 le n° de session 1
  • s1 récupère ce numéro de session et peut utiliser les variables de cette session

Autre cas de figure, si s2 récupère les données de s1 est les renvoie à C (donc, s2 est un genre de proxy):
  • C envoie une requête à s2 avec le n° de session 2
  • s2 envoie une requête à s1, et agit alors en tant que client pour s1
  • s2 envoie donc son PROPRE n° de session à s1, qui le récupère
  • s1 utilise les variables de la session associée à s2 (et non à C!)
  • s2 fait ce qu'il veut du résultat fournis par s1

Dans le 1er cas, C est le client de s1 suite à la redirection, et la session sur s1 sera celle de C.
Dans le 2nd cas, C est le client de s2 qui est le client de s1, et la session sur s1 sera celle de s2 (s1 ignore totalement C).

*: Dans PHP, si la session n'existe pas, il me semble que le serveur la créera, ce qui veut dire que si le client définit un cookie avec un numéro manuel, le serveur créera une session avec ce numéro-ci, ce qui peut être problématique si le n° envoyé par le client est incorrect, ou utilise des caractères interdits (à confirmer).


Donc, dans l'exemple donné:
  • C appelle s1.com/setsession.php?sessvalue=varX _S1_SESSION_C_TEST_ = varX (attention: y'a pas un risque que varX soit mal formé et permette de l'injection / XSS?)
  • Si C appelle s1.com/getsession.php : echo _S1_SESSION_C_TEST_ c'est à dire, varX
  • Si s2 appelle s1.com/getsession.php : echo _S1_SESSION_S2_TEST_ c'est à dire, null
  • C appelle s2.com/setsessionsurS1.php?sessvalue=varX:
    • Si C est redirigé vers s1.com/setsession.php?sessvalue=$_GET['sessvalue'], alors _S1_SESSION_C_TEST_=varX
    • Si s2 appelle lui-même (fopen, ou autre) s1.com/setsession.php?sessvalue=$_GET['sessvalue'], alors _S1_SESSION_S2_TEST_=varX
  • C appelle s2.com/getsessionsurS1.php alors,
    • Si C est redirigé vers s1.com/getsession.php, echo _S1_SESSION_C_TEST_
    • Si s2 appelle (fopen, ou autre) s1.com/getsession.php, echo _S1_SESSION_S2_TEST_


Pour répondre à la question, il faudrait donc savoir si "s2 appelle s1" signifie "C est redirigé vers S1" ou "S2 appelle, dans son code PHP, un truc de S1". Dans le 1er cas, la session vue par S1 sera celle de C, dans le 2nd cas, la session vue par s1 sera celle de s2 (identique pour tous les clients de s2 donc).


RE: [Résolu] Les sessions inter-serveur ? Ca marche ? - xviniette - 30-04-2013

Merci pour cette réponse bien expliqué. La question que je me pose est pour
Citation :"S2 appelle, dans son code PHP, un truc de S1".
où S2 fonctionne "comme un proxy".

J'en retiens donc la réponse qu'avait donné Oxman et que tu as confirmé.

Merci beaucoup !


RE: [Résolu] Les sessions inter-serveur ? Ca marche ? - niahoo - 30-04-2013

oui en gros ton serveur est un simple client.