Перенаправление с использованием HTTP-сообщения вместо простой ссылки, используя PHP

#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 эти два значения.