Проблема с перенаправлением URL-адресов PHP между несколькими доменами

Моим навыкам PHP немного не хватает, и я некоторое время пытался устранить эту проблему и безуспешно искал ответ... и я уверен, что это что-то простое.

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

Итак, пользователь посещает следующую страницу по гипотетическому URL-адресу abc.com:

<?php 
function over21(){  
    session_start();
    $redirect_url='http://xyz.com'; 
    $validated=false;  
    if(!empty($_COOKIE["over21"])) { $validated=true; } 
    if(!$validated && isset($_SESSION['over21'])) { $validated=true; } 
    if($validated) { return; } 
    else { 
        $redirect_url=$redirect_url."?return=".$_SERVER['REQUEST_URI']; 
        header('location: '.$redirect_url); 
        exit(0); 
    } 
} 
over21(); 
?>

<html>
  <head>
    <title>abc.com page</title>
  </head>
  <body>
    Before you are able to read this content, you will be redirected to xyz.com to validate your age
  </body>
</html>

Пока все хорошо, теперь их отправляют на xyz.com, чтобы ввести дату своего рождения:

<?php
session_start();
if(isset($_POST['submit']))
{
    $month = $_POST['month'];
    $day = $_POST['day'];
    $year = $_POST['year'];

    $birthday = mktime(0,0,0,$month,$day,$year);
    $difference = time() - $birthday;
    $age = floor($difference - 662256000);  
    if($age >= 21)
    {
        setcookie("over21",$value, time()+3600*24);
        $_SESSION['over21'] = 1;
        $redirect=isset($_GET['return'])?urldecode($_GET['return']):'./';
        header("location: ".$redirect);
        exit;

    }
    else
    {
        $_SESSION['under21'] = 0;
        header("location: http://google.com");
        exit;
    }
}
?>
<html>
  <head>
    <title>this is xyz.com</title>
  </head>
  <body>
    <form>
      There is a form in here with input's and such to gather day, month and year of birth.
    </form>
  </body>
</html>

Скрипт отлично работает, если я держу элемент проверки возраста и страницу перехода в одном домене. Но как изменить это так, чтобы страница проверки возраста отображала полный URL-адрес ссылающегося домена, а не только поддомен?


person Gregg Richter    schedule 26.03.2013    source источник
comment
Оба сайта имеют общий домен? Знакомы ли вы с политикой единого происхождения?   -  person ficuscr    schedule 26.03.2013


Ответы (1)


Итак, проигнорируйте одно и то же замечание о происхождении, я думаю, просто увидев код запуска сеанса, я подумал, что вы пытаетесь разделить сеанс между доменами.

Вы просто спрашиваете о переменных $_SERVER, как я понимаю.

'REQUEST_URI' — URI, предоставленный для доступа к этой странице; например, '/index.html'.

Вместо этого попробуйте что-то вроде HTTP_HOST.

Аналогично: PHP получить доменное имя

person ficuscr    schedule 26.03.2013
comment
Спасибо @ficuscr, это помогает. Я изменил страницу перенаправления, чтобы оператор else выглядел так: $redirect_url=$redirect_url.?return=.$_SERVER['HTTP_HOST']; Но теперь кажется, что полный URL-адрес ссылочной страницы добавляется к URL-адресу ссылочной страницы вместо перенаправления обратно. Чтобы увидеть это в действии, посетите rwd-development.com, который будет перенаправлен на rwd-development2.com (а не на URL-адрес этого перенаправления). Как только вы отправите свой возраст, он должен отправить вас обратно на rwd-development.com, но вместо этого он просто добавит существующий URL-адрес. Есть предположения? Еще раз спасибо - person Gregg Richter; 27.03.2013
comment
Сначала я подумал, что вы теряете значение GET при отправке формы проверки возраста, однако я вижу, что URL-адрес действия формы содержит переменную ?return. Думаю, вам просто нужно полностью указать URI для заголовка местоположения, добавьте http://. Например. header("Location: http://www.example.com/"); - person ficuscr; 27.03.2013
comment
Это работает: http://rwd-development2.com/?return=http://yahoo.com Проверьте код страницы rwd-development.com, возможно, вы делаете дополнительную переадресацию. Использование такого инструмента, как HTTPLiveHeaders из Fiddler, позволяет вам видеть отправленные заголовки и любые перенаправления 302 — бесценный инструмент для использования. - person ficuscr; 27.03.2013
comment
как я могу связаться с вами в автономном режиме? Если вы согласны, я буду рад заплатить вам, чтобы исправить это. Для всех, кто знает PHP и имеет доступ к коду, я уверен, что это можно исправить менее чем за час... возможно, за несколько минут. Если вы в Твиттере, свяжитесь со мной через дескриптор «greggrichter», и мы можем отправить контактную информацию в DM. Спасибо - person Gregg Richter; 27.03.2013