#php #cross-domain #one-to-many
#php #междоменный #один ко многим
Вопрос:
У меня есть один веб-сайт издателя журнала, и на этом сайте есть стандартная гиперссылка на другой сайт, на котором размещена электронная версия журнала. Хостинг-сайт emagazine имеет свой поток для каждой публикации, схему аутентификации для каждого пользователя в журнале. Для того, чтобы подписчикам журнала не приходилось регистрироваться на обоих сайтах, стороны договорились о своего рода рукопожатии.
При перенаправлении на сайт журнала, я должен опубликовать небольшую HTML-форму с несколькими значениями. Мое первое препятствие заключается в том, что сайт издателя журнала управляется CMS, поэтому я не могу просто окружить одну кнопку входными данными и замаскировать ее под перенаправление публикации.
Мое самое чистое решение на данный момент — создать новый, непубличный, маленький PHP, на который будет ссылаться сайт originals magazine. Этот PHP отобразит небольшую HTML-форму, которая немедленно отправит instelf на сайт хостинга журнала, поэтому, когда читатель журнала попадает на сайт хостинга журнала, он уже проходит аутентификацию
Комментарии:
1. Обязательно ли, чтобы СООБЩЕНИЕ поступало с клиентского компьютера, или допустимо, чтобы оно поступало непосредственно с вашего сервера?
2. Обязательно ли это должен быть PHP? Это должно быть довольно просто сделать с помощью JS.
Ответ №1:
Вероятно, это нужно сделать на стороне сервера с помощью cURL (или file_get_contents
с $context
параметром) или на стороне клиента с помощью $.post
. Я не думаю, что вы собираетесь убедить большинство браузеров отправлять POST
запрос только потому, что так указано в заголовке сервера — это было бы ужасно для безопасности. (Например: Amazon мог бы просто указать вашему браузеру нажать кнопку «Купить сейчас», если бы вы находились на странице телевизора стоимостью 10 000 долларов.)
Пример PHP
<?php
$opts = array(
'http'=>array(
'method'=>"POST"
)
);
$context = stream_context_create($opts);
$response = file_get_contents("<your url>", 0, $context);
Пример JS
params = { 'test1': 'value' };
$.post('<your url>', params, function(response)
{
// handle response
});
Ответ №2:
Вы можете сделать это с помощью перенаправления заголовка страницы, но это не будет совпадать с отправкой формы, поэтому страница, на которую она отправляется, должна быть способна принимать отправленные формы в стиле GET, но вы должны быть в состоянии сделать это с помощью кода, подобного следующему:
<?php
$val1 = mysql_escape_string($_POST["val1"]);
$val2 = mysql_escape_string($_POST["val2"]);
//Authenticate Locally here and then...
$val1 = urlencode($val1);
$val2 = urlencode($val2);
header("Location: http://www.emagazine.com/forminput.php?val1=$val1amp;val2=$val2");
Имейте в виду, что если вы что-либо напечатаете в браузере, перенаправление заголовка php завершится ошибкой, это должно быть первым, что попадет в браузер.
Комментарии:
1. Как бы то ни было,
mysql_escape_string
это не то, что вам нужно, если вы не вставляете в базу данных. Используйтеurlencode
эти два значения.