Я не уверен, что это возможно.
У моей компании есть свой основной сайт, который принимает кредитные карты и другую платежную информацию. У них также есть другие сайты, которые напрямую связаны с событиями, которые мы принимаем. Например, наш главный сайт – это что-то вроде:
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
ищет перечисленные выше переменные сеанса.
Идентификаторы сеансов передаются с использованием файлов 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 } }); });