2

私の PHP のスキルは少し不足しており、しばらくの間、これをトラブルシューティングして、答えを探してみましたが、うまくいきませんでした...そして、それは簡単なことだと確信しています。

Cookie が存在するかどうかを確認するページが 1 つのドメインにあり、存在しない場合は、ユーザーを完全に別のドメインに送信して生年月日を入力します。入力して 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 を取得するようにするにはどうすればよいでしょうか?

4

1 に答える 1

0

したがって、同じオリジンの発言は無視してください。セッション開始コードを見ただけで、ドメイン間でセッションを共有しようとしていると思いました。

私が見ている$_SERVER 変数について尋ねているだけです。

「REQUEST_URI」 - このページにアクセスするために指定された URI。たとえば、「/index.html」です。

HTTP_HOST代わりに次のようなものを試してください。

類似: PHP はドメイン名を取得します

于 2013-03-26T19:16:00.153 に答える