Je préciserai quand même (parce que je suis pas certain d'avoir compris ta question...):
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:
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):
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é:
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).
- 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 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
- Si C est redirigé vers s1.com/setsession.php?sessvalue=$_GET['sessvalue'], alors _S1_SESSION_C_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_
- Si C est redirigé vers s1.com/getsession.php, echo _S1_SESSION_C_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).