0

私のサイトでは、フォームは AJAX 経由で取り込まれ、セッション ID と照合されます。これが最適ではないことはわかっていますが、私たちにとってはうまくいっています。リファラーがセッション ID を持っていない場合、「別のページ」にリダイレクトされます。一部の外部 URL がフォームに直接アクセスできるようにする必要があります。フォームへのリンクがあるページにセッション ID を設定します。

フォームページにあるものは次のとおりです。

<?php
$code = $_GET['sessionid'];
if(strcmp( $code , 'XXXXX'  ) != 0) {
    header("Location: http://www.domain.com/anotherpage.php");
} 
?>

一部の外部ドメインにフォーム ページへの直接アクセスを許可する必要があり、これに問題があります: (フォーム ページの head タグの上に配置しています)

<?php
    $code = $_GET['sessionid'];
    $referrer = $_SERVER['HTTP_REFERER'];

    if(strcmp( $code , 'XXXXX' ) !=0) {
        header("Location: http://www.domain.com/anotherpage.php");
    } else {
        if (preg_match("/site1.com/",$referrer)) {
            header('Location: http://www.domain.com/desiredpage.php');
        }
    }
?>

これはまだ「anotherpage.php」に戻ってきます。何かアイデアはありますか?

** * ** * **編集* ** * ** * 助けてくれてありがとう、それは私が要求した広告で動作します。今、私が尋ねたことが完全に正しくないことがわかりました。これにより、URL に =sessionid?=XXXXX が追加されます。URL が変更されないように .jquery .load でコンテンツをロードしているため、これは私のサイトでは問題になりません。セッション ID を表示したくありませんが、現在は表示されています。a) 何らかの形で URL を「トリミング」するか、b) 2 つの関数を分離して排他的にすることはできますか?

4

6 に答える 6

3
if(strcmp( $code , 'XXXXX' ) !=0) {
    if (preg_match("/site1.com/",$referrer)) {
        header('Location: http://www.domain.com/desiredpage.php');
    } else {
        header("Location: http://www.domain.com/anotherpage.php");
    }
} 
于 2011-03-09T18:29:35.253 に答える
1

As I read your post, you want anyone from the preg_match to get the desired page regardless of sessionID status, so you don't want to test sessionID first.

Start the if block with the preg_match test.

于 2011-03-09T18:29:56.203 に答える
1

あなたの最初のifことは、それらが持っていないかどうかを確認し、それら$codeをリダイレクトすることです。これは常に当てはまります。おそらく$referrer最初に確認してから、$code確認を行う必要があります。

于 2011-03-09T18:31:01.257 に答える
1

他にある場合は逆を試してください

<?php
    $code = $_GET['sessionid'];
    $referrer = $_SERVER['HTTP_REFERER'];
    if (preg_match("/site1.com/", $referrer)) {
        header('Location: http://www.domain.com/desiredpage.php');
    } else if (strcmp( $code , 'XXXXX' ) != 0) {
        header("Location: http://www.domain.com/anotherpage.php");
    }
?>
于 2011-03-09T18:31:57.993 に答える
0

私がこれを誤解していなければ、問題はチェックする順序にあります。

一部のリファラーがセッション ID を持っていなくてもサイトへのアクセスを許可する場合は、セッション IDを確認する前にそれを確認する必要があります。そうしないと、他の人と同じように扱われることになります。

条件の順序を切り替える (最初にリファラーを確認してからセッション ID を確認する) か、セッション ID が無効であることが既にわかっているブランチ内のリファラーを確認することができます。

于 2011-03-09T18:31:57.830 に答える
0

問題は正規表現にある可能性があります。次のようにする必要があります。

if (preg_match("/site1\.com/",$referrer))

ドット (.) のエスケープに注意してください。

于 2011-03-09T18:33:16.183 に答える