Conserver sa session_id() d'un site à un autre !

ViPHP
ViPHP | 4039 Messages

29 mars 2010, 16:14

Et sans parler du fait que les cookies du site A sont inaccessibles pour le site B (a moins d'être sous le même domaine)
Mais qu'importe. (je suis ici - dernier petit projet)
Berze going social.

ViPHP
ViPHP | 5462 Messages

29 mars 2010, 16:14

c'est 2 cookie differents, 2 sessions differentes, mais avec les même données

Eléphant du PHP | 53 Messages

29 mars 2010, 16:16

Ok je viens de test tout ça et voilà le résultat

Site A, sessionTest.php:
<?php 
session.cookie_domain("http://www.siteB.com");
session_start();
echo session_encode();
?>
Résultat:
Rien :(

Site B, testSiteB.php:
<?php
session_start();
$session  = file_get_contents('http://siteA.com/sessionTest.php');
session_decode($session);      
var_dump($_SESSION);
?>
Résultat:

Warning: file_get_contents(http://siteA.com/sessionTest.php) [function.file-get-contents]: failed to open stream: HTTP request failed! HTTP/1.0 500 Internal Server Error in /home/www/siteB/testSiteB.php on line 3
array(0) { }

ViPHP
ViPHP | 5462 Messages

29 mars 2010, 16:17

non tu peux pas envoiyer un cookie a un autre site comme ca,
ta mis les erreurs en strict ? le soucis se trouve a ce niveau la

ViPHP
ViPHP | 4039 Messages

29 mars 2010, 16:20

$session  = file_get_contents('http://siteA.com/sessionTest.php');
Cette ligne provoque sur le site B la lecture d'une page sur le site A. Il n'y a aucun contexte de session lié à cette requête. Pour Site A il s'agit d'un nouvel utilisateur, et génère donc une nouvelle session.
Mais qu'importe. (je suis ici - dernier petit projet)
Berze going social.

ViPHP
ViPHP | 5462 Messages

29 mars 2010, 16:22

$session  = file_get_contents('http://siteA.com/sessionTest.php');
Cette ligne provoque sur le site B la lecture d'une page sur le site A. Il n'y a aucun contexte de session lié à cette requête. Pour Site A il s'agit d'un nouvel utilisateur, et génère donc une nouvelle session.
non, ca fait comme si t'ouvrais un nouvel onglet ca te garde ta session

Mammouth du PHP | 672 Messages

29 mars 2010, 16:26

non, ca fait comme si t'ouvrais un nouvel onglet ca te garde ta session
Je ne parierais pas trop dessus vu que là c'est un autre utilisateur (le serveur PHP de site2) qui se connecte sur la siteA. Ce n'est pas l'utilisateur de départ...

Maxou88100 >>
A priori, session.cookie_domain("http://www.siteB.com"); crée un cookie pour le domaine siteB. Il n'y a pas besoin d'aller lire un fichier sur le siteA, il suffit de lire le cookie...

Eléphant du PHP | 53 Messages

29 mars 2010, 16:35

Ok j'essaye :) Désolé de vous mettre en conflit xd

Eléphant du PHP | 53 Messages

29 mars 2010, 16:40

A priori ça ne marche toujours pas ! Mais bon je dois partir :/ Je reprend dès demain matin ! En espérant que j'aurais les idées plus claires :(

Merci à vous ! Bonne soirée !

ViPHP
ViPHP | 5462 Messages

29 mars 2010, 16:53

A priori ça ne marche toujours pas ! Mais bon je dois partir :/ Je reprend dès demain matin ! En espérant que j'aurais les idées plus claires :(

Merci à vous ! Bonne soirée !
ta un soucis au niveau des objets de ton cookie

ViPHP
ViPHP | 4039 Messages

29 mars 2010, 22:25

non, ca fait comme si t'ouvrais un nouvel onglet ca te garde ta session
Bon, par les exemples alors...

Site A:
<?php
session_start();
file_put_contents('./logA.txt',print_r(getallheaders(),true)."\n----\n",FILE_APPEND);

if (!isset($_SESSION['test'])) $_SESSION['test'] = generateRandStr(10);
echo session_encode();



function generateRandStr($length){
      $randstr = "";
      for($i=0; $i<$length; $i++){
         $randnum = mt_rand(0,61);
         if($randnum < 10){
            $randstr .= chr($randnum+48);
         }else if($randnum < 36){
            $randstr .= chr($randnum+55);
         }else{
            $randstr .= chr($randnum+61);
         }
      }
      return $randstr;
   } 
Site B:
<?php
session_start();

$sess_A = file_get_contents('http://127.0.0.1/test_session/siteA.php');

var_dump($sess_A);
Lorsque l'utilisateur se connecte au siteA, une séquence aléatoire est générée, et lui restera attachée jusqu'à la fin de la session.

Et, lorsque ce même utilisateur se connecte au siteB, a chaque fois, la séquence générée est différente.. BIZARRE !!

Mieux, lorsqu'un utilisateur lambda se connecte au siteA, voici ce que le siteA voit:

Code : Tout sélectionner

Array ( [Host] => 127.0.0.1 [User-Agent] => Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.9.1.8) Gecko/20100202 Firefox/3.5.8 (.NET CLR 3.5.30729) [Accept] => text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 [Accept-Language] => fr,fr-fr;q=0.8,en-us;q=0.5,en;q=0.3 [Accept-Encoding] => gzip,deflate [Accept-Charset] => ISO-8859-1,utf-8;q=0.7,*;q=0.7 [Keep-Alive] => 300 [Connection] => keep-alive [Cookie] => PHPSESSID=vs8p8hi8lh2hnui1us9ue89591 <- Oh!! un identifiant de session! [Cache-Control] => max-age=0 )
Et que voit le siteA quand c'est ce même utilisateur qui se connecte par le siteB ? Le cookie contenant l'identifiant de la session ? Sur ?

Code : Tout sélectionner

Array ( [Host] => 127.0.0.1 )
Que dalle, njet, nada. Rien du tout. Et donc, il est impossible pour le siteB de récupérer les données liées à l'utilisateur qu'il aurait dans une session sur le siteA, en tout cas de cette façon.

Pour répondre à la question, je pense que le meilleur moyen est un JS sur le siteB, qui récupère les données de session sur le siteA et les fait ainsi transiter vers B. Mais sans javascript, je doute qu'une solution réaliste puisse se dégager...
Mais qu'importe. (je suis ici - dernier petit projet)
Berze going social.

ViPHP
ViPHP | 5462 Messages

29 mars 2010, 23:59

ouai, t'avais raison, par contre en JS ca ce fais mais c'est moins joli :wink:

Eléphant du PHP | 53 Messages

30 mars 2010, 09:01

Bonjour,

C'est partie pour une nouvelle journée de galère :p

Si j'ai bien compris, même avec un session_set_cookie_params il est impossible d'utiliser mes sessions sur plusieurs domaines :cry:

Donc, à priori il est possible de passer des variables d'un domaine à un autre en passant par du JS ? J'aimerais en savoir plus... Un tutoriel, ou un exemple ...

Mais n'y a t-il pas de danger si l'utilisateur désactive son JS ?

ViPHP
ViPHP | 4039 Messages

30 mars 2010, 09:10

Une autre solution, si les utilisateurs passent directement d'un site à l'autre, est d'utiliser un lien (du siteA vers B par exemple) qui contiendrait quelques infos permettant de l'identifier côté B (un identifiant généré automatiquement, ou carrément la session entière encodée dans l'url, mais il faudrait voir la taille des données, sinon tu peux toujours les faire transiter par POST).
Mais qu'importe. (je suis ici - dernier petit projet)
Berze going social.

Eléphant du PHP | 53 Messages

30 mars 2010, 09:15

Hmm passer par un GET me parait un peu juste ! J'ai vraiment beaucoup de données dans ma session...

Je veux bien utiliser un POST, mais j'ai peur que ce soit le même problème entre deux domaines différents... Je ne vois pas comment procéder :(