Подтвердить что ты не робот

Сохранение переменных сеанса в разных доменах

Я не уверен, что это возможно.

У моей компании есть свой основной сайт, который принимает кредитные карты и другую платежную информацию. У них также есть другие сайты, которые напрямую связаны с событиями, которые мы принимаем. Например, наш главный сайт выглядит примерно так:

http://www.etm124biz.com

Но есть другой сайт специально для ежегодного события:

http://www.etm124annualgala.com

Мой сайт "event" обрабатывает регистрацию и сохраняет в нашей базе данных, но наш основной сайт обрабатывает обработку кредитных карт. При текущих покупках, обрабатываемых на основном веб-сайте, сеансы используются для передачи данных на экраны оплаты /cc.

Не меняя моего платежного кода (чтобы принимать, скажем, параметры $_GET), не должны ли меняться переменные $_SESSION?

Пример:

$_SESSION['s_address1'] = $_POST['address1'];
$_SESSION['s_address2'] = $_POST['address2'];
$_SESSION['s_city']     = $_POST['city'];
$_SESSION['s_state']    = $_POST['state'];
$_SESSION['s_zip']      = $_POST['zip'];

header('Location: https://www.etm124biz.com/payment.php?oid=' . $oid . '&src=conf&id=' . $seq);

Моя страница payment.php ищет переменные сеанса адреса выше.

4b9b3361

Ответ 1

Идентификаторы сеанса междоменной сессии

Идентификаторы сеансов передаются с использованием файлов cookie по умолчанию. Поскольку ваши веб-сайты находятся в разных доменах, cookie сеанса не переносится, так что одна вещь, которая препятствует работе междоменных сессий.

Один из методов, позволяющих переносить идентификаторы сеансов, заключается в том, чтобы добавить их в строку запроса всех ваших запросов (PHP даже имеет некоторую степень встроенной поддержки для этого). Однако этот способ делать вещи имеет много недостатков - самое главное, что люди копируют/вставляют URL-адреса все время, со всем, что подразумевает раскрытие действительного и повторного использования недопустимых идентификаторов сеанса, и поэтому не рекомендуется.

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

Общие данные сеанса

Даже если файл cookie не был проблемой, вам нужно будет иметь данные сеанса на каком-то хранилище, обычно доступном для всех ваших серверов. По умолчанию хранилище - это локальная файловая система, поэтому снова это нужно изменить, если вы хотите выполнять междоменные сеансы.

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

Ответ 3

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

СЕРВЕРНАЯ СТОРОНА

Для междоменных сеансов PHP нам нужно выполнить следующие действия

Шаг 1

Прежде всего, нам нужно установить эти строки в .htAccess в нашем основном домене, где php получает запрос

SetEnvIf Origin ^(http?://m\.example\.com(?::\d{1,5})?)$   CORS_ALLOW_ORIGIN=$1
Header append Access-Control-Allow-Origin  %{CORS_ALLOW_ORIGIN}e   env=CORS_ALLOW_ORIGIN
Header set Access-Control-Allow-Methods "POST, GET, OPTIONS, DELETE, PUT"
Header set Access-Control-Allow-Credentials true
Header set Access-Control-Allow-Headers "x-requested-with, Content-Type, origin, authorization, accept, client-security-token"

Эти строки указывают, что разрешать запросы от http://m.example.com. Обратите внимание, что я установил http. Вы можете установить https, если у вас есть SSL-соединение.

Шаг 2

Вы должны разрешить PHP использовать одни и те же сеансы для разных поддоменов до session_start()

ini_set('session.cookie_domain', '.example.com');
session_start();

Если у вас есть доступ к php.ini, то установите его один раз там, тогда вам не нужно будет устанавливать строки выше в ваших файлах PHP.

КЛИЕНТСКАЯ СТОРОНА

И последнее, вы должны сообщить Браузеру сделать запрос с помощью Cross-Domain. Как в JQuery

$(document).ready(function()
{
  $.ajaxSetup({
    crossDomain: true,
    xhrFields: {
        withCredentials: true
    }
  });
});