8
votes

Comment passer des variables de session d'un domaine à un autre en php

J'ai rencontré une situation où j'ai besoin de passer des variables $ _session d'un domaine à une page iframe à partir d'un autre domaine. J'ai passé les 16 derniers jours à essayer diverses méthodes en vain. Je pense que le seul moyen logique serait d'encoder les variables de l'URL qui appelle l'iframe et de les décoder dans la page iframe. Je ne sais pas comment y aller et je cherche des échantillons, une assistance, etc. que je peux trouver.

Merci pour toutes les suggestions et toutes les suggestions. P>

Voici un exemple de ce que j'essaie de faire ... p>

Exemple: P>

$_SESSION['fName']['abc']; 
$_SESSION['lName']['def']; 
$_SESSION['address1']['ghi']; 
$_SESSION['address2']['jkl']; 
$_SESSION['country']['mno']; 
$_SESSION['postal_code']['pqr']; 
$_SESSION['city']['stu']; 
$_SESSION['retUrl']['vwx']; 
$_SESSION['decUrl']['yz']; 


1 commentaires

Pourquoi pensez-vous que vous devez envoyer une variable exacte de la session? Pourquoi ne pas utiliser une autre méthode? Quels sont ces domaines? Lequel d'entre eux contrôlez-vous? Partage-ils le même serveur?


4 Réponses :


0
votes

Vous pouvez prendre un tableau assoitif et le convertir en une chaîne de requête avec la fonction http_build_query

Remarque: le deuxième tableau que vous avez affiché n'est pas la sortie correcte d'un tableau de session.

sur la page de réception / domaine, prenez simplement la chaîne de requête et placez / désinfectionner les paramètres attendus dans votre tableau $ _session (ou tout ce que vous avez à faire avec elle).

Ceci est plus sûr que d'utiliser quelque chose comme Serialize / non désérioriate, car seules les tableaux sont utilisés.


0 commentaires

2
votes

Sérialisez le tableau SessionData et envoyez-le sous forme de paramètre, puis de le désérialiser http://www.php.net/manual/fr/funcunction.Sérienze. php


1 commentaires

Il a demandé des moyens de le faire et semblait un peu désespéré, j'ai donné à mes commentaires sur le sujet et laissez-le à cela. Si c'est une bonne pratique ou non, c'est à lui.



1
votes

Utilisez Serialize () puis base64_encode () pour transmettre les données sans le corrompre et (principalement) entretenir sa structure.

Ce n'est pas une bonne pratique, car toute personne qui figure sur la manière dont il fonctionne peut injecter des données arbitraires, mais si c'est ce que vous voulez faire, cela fonctionnera.


2 commentaires

@Col. Shrapnel Je réponds comment quelque chose peut être fait, puis fournir l'avertissement et le raisonnement pour la raison pour laquelle cela ne devrait pas être fait. Je ne vais pas mentir et dire que je n'ai pas utilisé moi-même une méthode similaire dans le passé. : D Le monde a besoin de faire des erreurs pour apprendre.


Aussi sa valeur à noter qu'il n'y a pas de mauvaises manières, il n'y a que de mauvaises implémentations .. Oh le code Heracy que j'ai écrit dans mes jours mais travaille encore parfaitement pour ce qu'il a eu l'intention de faire.



1
votes

Pourquoi ne pas simplement envoyer l'ID de session à l'autre domaine (et en supposant qu'ils puissent lire le même substrat de stockage de session), utilisez-le comme l'ID de session, par exemple

<?php
// catch remote session id, validate and reassociate
if (md5($_GET['exported_sessid'], $shared_secret) == $_GET['check_hash']) {
      // (basic CSRF check
      session_id($_GET['exported_sessid']);
}
session_start();
....


1 commentaires

Non testé ceci - vous pouvez forcer la valeur en $ _Cookie [Nom de session (Nom ()] avant d'appeler session_start ()