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

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

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

http://www.etm124biz.com

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

http://www.etm124annualgala.com

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

Не изменяя мой платежный код (чтобы принимать, скажем, параметры $ _GET), не должны ли $_SESSION переменные $_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 ищет перечисленные выше переменные сеанса.

Solutions Collecting From Web of "Сохранение переменных сеанса в разных доменах"

Междоменные сеансовые идентификаторы

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

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

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

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

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

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

у этого вопроса есть ответ для ir.

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

и этот вопрос очень часто исследует предмет.

  • Как создать службу общего доступа в нескольких доменах?

Уже поздно ответить на этот вопрос, но поскольку я столкнулся с этой проблемой и не смог найти решение даже после десятков часов и поиска 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 } }); });