多个域之间的PHP URL重定向存在问题

多个域之间的PHP URL重定向存在问题,php,http-redirect,Php,Http Redirect,我的PHP技能有点欠缺,我已经尝试了一段时间来解决这个问题,并在没有运气的情况下寻找答案。。。我相信这很简单 我在一个域上有一个页面,它正在检查cookie是否存在,如果不存在,它会将用户发送到一个完全独立的域,以输入他们的出生日期。一旦他们进入并超过21岁,他们将被重定向回原始域,但出于某种原因,我的脚本只捕获引用域的子目录,而不是整个内容 因此,用户在假设的URL abc.com上访问以下页面: <?php function over21(){ session_start

我的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>

abc.com网页
在您能够阅读此内容之前,您将被重定向到xyz.com以验证您的年龄
到目前为止,他们现在被发送到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>

这里是xyz.com
这里有一个表格,上面有输入,用来收集出生日期、月份和年份。

如果我把年龄验证块和参考页面都放在同一个域上,脚本工作得很好。但是我如何修改它,以便年龄验证页面能够捕获引用域的完整URL,而不仅仅是子域?

因此,忽略我认为的相同来源的评论,仅仅看到会话开始代码就让我认为您试图跨域共享会话

你只是问我明白了

“请求URI”-为访问此页面而提供的URI;例如,“/index.html”

尝试类似于HTTP\u主机的方法

类似的:

两个站点是否共享一个公共域?您熟悉吗?谢谢@ficuscr,这很有帮助。我修改了重定向引用页面,因此else语句是:$redirect\u url=$redirect\u url。“?return=“.$\u SERVER['HTTP\u HOST'”;但现在看来,引用页面的完整URL被附加到引用页面的URL中,而不是重定向回引用页面。要查看此操作,请访问将重定向到rwd-development2.com(而不是此重定向上的URL字符串)。一旦你提交了你的年龄,它会把你送回rwd-development.com,但它只是附加了现有的URL。有什么想法吗?再次感谢首先,我认为您在发布年龄验证表单时丢失了GET值,但是我看到表单操作URL带有?return变量。如果您只需要完整地表达location头的URI,请添加
http://
。例如,
标题(“位置:http://www.example.com/");这是有效的:检查rwd-development.com页面的代码,认为你在做额外的重定向。使用像Fiddler的HTTPLiveHeaders这样的工具可以让您查看发送的标题和任何302重定向-这是一个非常有用的工具。我如何与您脱机联系?如果你愿意的话,我很乐意付钱给你来解决这个问题。对于任何了解PHP并有权访问代码的人,我相信这应该可以在不到一个小时内修复。。。可能几分钟后。如果你在Twitter上,请通过handle'greggrichter'与我联系,我们可以提供DM联系信息。谢谢