Как я передаю переменные сеанса от одного домена до другого в PHP

Я встретился с ситуацией, куда я должен передать $ _SESSION переменные от одного домена до iFrame страницы от другого домена. Я провел прошлые 16 дней, пробуя различные методы напрасно. Я думаю, что единственный логический путь состоял бы в том, чтобы закодировать переменные в URL, который называет iFrame, и декодируйте их на странице th iFrame. Я не уверен, как пойти об этом, и я ищу любые образцы, помощь и т.д., что я могу найти.

Спасибо за любого и все предложения.

Вот пример того, что я пытаюсь сделать...

Пример:

<!-- Note only using hidden as I didn't want to build the form at test phase-->
<form name="test" method="post" action="iframe_test.php">
<input type="submit" name="Submit" />
<input type="hidden" name="fName" value="abc" />
<input type="hidden" name="lName" value="def" />
<input type="hidden" name="address1" value="ghi" />
<input type="hidden" name="address2" value="jkl" />
<input type="hidden" name="country" value="mno" />
<input type="hidden" name="postal_code" value="pqr" />
<input type="hidden" name="city" value="stu" />
<input type="hidden" name="retUrl" value="vwx">
<input type="hidden" name="decUrl" value="yz">

Таким образом, отсюда я поражаю iframe_test.php и делаю следующее: Код PHP: функционируйте StripSpecChar ($val) {возврат (preg_replace (' / [^a-zA-Z0-9" "-. @: / _] / ','', $val));}

foreach ($_POST as $key => $val) { 
$_SESSION[$key] = StripSpecChar($val);   
} 

и я получаю массив сессии, который похож на это: Код:

Array
(
    [fName] => abc
    [lName] => def
    [address1] => ghi
    [address2] => jkl
    [country] => mno
    [postal_code] => pqr
    [city] => stu
    [retUrl] => vwx
    [decUrl] => yz
)

Все еще вся польза до сих пор.... называет iFrame

Код:

<body>
Some page stuff here

<div align="center"><span class="style1"><strong>This is the iFrame Page</strong></span>
</div>
<div align="center">
<iframe src="https://www.other_domain.org/iframe/reserve.php" width="500" height="350" frameBorder="0"></iframe>
</div>

</body>

Таким образом, КАК я беру...

$_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']; 

и превратите его в закодированный URL, который я ищу? Далее, после того как это сделано, как я получаю сессию Вар назад как сессия Вар на том новом домене iFrame страница...

8
задан Dave 26 April 2010 в 16:25
поделиться

4 ответа

Почему бы просто не отправить идентификатор сеанса в другой домен (и при условии, что они могут читать ту же подложку хранения сеанса), использовать его в качестве идентификатора сеанса там, например

<?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
ответ дан 6 December 2019 в 00:06
поделиться

Используйте serialize () , а затем base64_encode () , чтобы передать данные, не повреждая их и (в основном) поддерживая их структуру.

Это не очень хорошая практика, потому что тогда любой, кто выяснит, как это работает, может вводить произвольные данные, но если это то, что вы хотите сделать, это сработает.

1
ответ дан 6 December 2019 в 00:06
поделиться

Сериализуйте массив sessiondata и отправьте его в качестве параметра, а затем десериализуйте его. http://www.php.net/manual/en/function.serialize.php

2
ответ дан 6 December 2019 в 00:06
поделиться

Вы можете взять ассоциативный массив и преобразовать его в строку запроса с помощью функции http_build_query

Примечание: второй массив, который вы опубликовали, не является правильным выводом сессионного массива.

На принимающей странице/домене просто возьмите строку запроса и поместите/санируйте ожидаемые параметры в ваш массив $_SESSION (или что вам нужно с ним делать).

Это безопаснее, чем использовать что-то вроде serialize/unserialize, поскольку используются только массивы.

0
ответ дан 6 December 2019 в 00:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: