1

ユーザーがクリックした場所を検出する必要があります。AJAXコンテンツは、挿入先のソースページに応じて異なる方法で表示する必要があるためです。

about.phpに入る場合はデータのみである必要がありますが、about-main.phpに入る場合は中央の列全体である必要があるため、データのヘッダー/フッターラッパーが必要です。

AJAXを介して呼び出されたhtmlは、このコードを使用して誰が質問しているかを確認し、HTML応答を適切にフォーマットするphpページに保持されます。

$array[] = "/cf/about.php";
$array[] = "/cf/about/about-main.php";
$array[] = "/cf/about/other-page.php";


$ispage = "";
foreach ($array as $value) {
    if ($_SERVER['HTTP_REFERER'] != $value) {
        $ispage = "";
    } else {
        $ispage = "woot";
    }
}
if ($ispage == "woot") {
        echo $content;
    } else {
        include_once 'about-header.php';
        echo $content;  
        include_once 'about-footer.php';
}

問題は...HTTP_REFERERは少しヒットしてミスしているようです。ネットワークで作業している間は問題なく動作しますが、自宅のコンピューターで試してみましたが、明らかに完全に機能していません。結果はひどいものです:o

これを達成する別の方法はありますか?セッション変数を使用できると思いますが、それについてはあまり経験がありません。

ありとあらゆるヒント/ヒントをいただければ幸いです;)ありがとうございます!

編集:

このページは実際にはスタッフのプロフィールページです。通常の場所はabout.phpで、2列目のdivにはサムネイルのグリッドが表示され、クリックすると、AJAXを介してその場所にプロファイルが読み込まれます。すべて素晴らしくシンプルです-戻るボタンは写真のグリッドをリロードします。

問題は、各スタッフにも静的ページが必要なことです。これらはabout/staff-name.phpで作成しました。内容は同じですが。サーバーがabout/staff-name.phpに直接アクセスしたかどうかをサーバーに検出させ、アクセスした場合は、ヘッダー/フッターをラップします。

リクエストが写真のグリッド(つまりAJAX)からのものである場合、ヘッダー/フッターラッパーは必要ありません。

それは明らかですか?:o

1)AJAXリクエストの場合-ラッパーなし2)AJAXリクエストでない場合-ヘッダー/フッターラッパーを追加

4

4 に答える 4

3

AJAX呼び出しでフラグを渡して、表示するコンテンツのタイプをスクリプトに指示する方が簡単ではないでしょうか。

編集:

したがって、about/staff-name.phpはコンテンツを表示します。about / staff-name.php?FromAjax=1としてAJAX経由で呼び出します

次に、about /staff-name.phpファイルで:

if (isset($_REQUEST['FromAjax']) ) {
    echo $content;
} else {
    include_once 'about-header.php';
    echo $content;  
    include_once 'about-footer.php';
}
于 2009-07-27T10:30:18.947 に答える
3

いずれにせよ、リファラーはWebサイト全体の基礎となる情報ではありません。クライアントから送信されます。つまり、(少なくとも):

  • クライアントは必ずしもそれを送信する必要はありません
    • ブラウザで無効にすることができます
    • 一部のファイアウォール/アンチウイルスはそれを削除します
  • 偽造/変更することができます(Firefoxの簡単な方法は、拡張機能を使用してそれを行うことです)

あなたは間違いなくあなたが必要なことをするためのより良い/より良い/より信頼できる方法を見つけなければなりません。

(すでに破棄している) 1つの解決策は、すべてのリンクに追加情報を渡して、リクエストがどのページからのものであるかを示すことです。私の意見では、これはおそらく最善の方法です...

たぶんもっと簡単な方法は、Ajaxリクエストにパラメーターを追加して、それがどこから来たのかを言うことでしょう。つまり、PHPスクリプトのリファラーに依存する代わりに、リクエスト内のパラメーターを確認するだけです。これは、「一種のリファラー」として機能しますが、あなたが設定しますか?

これはより安全ではありません(ユーザーはそのパラメーターを使用してリクエストを偽造できます)が、少なくとも、無効化/変更されることはありません(ユーザーが手動で行う場合を除く)


最後に、あなたもこれを言います:

1)AJAXリクエストの場合-ラッパーなし
2)AJAXリクエストでない場合-ヘッダー/フッターラッパーを追加

PHPスクリプトがAjaxリクエストを介して呼び出されたかどうかを判断するだけの場合は、ここでも2つの解決策があります。

  • Ajaxを介して行われる場合は、リクエストにパラメータを追加します(このパラメータは、リクエストを行うJSスクリプトにのみ追加します。パラメータがここにある場合、PHPはそれがAjaxリクエストであることを認識します)
  • X-Requested-Withまたは、PHPスクリプトで、 HTTPヘッダーを探します。これはXMLHttpRequest、Ajax呼び出しを介してリクエストが行われたときに値が含まれることがよくあります。(ただし、JSフレームワークで設定されていることを確認する必要があります/またはブラウザによって異なる可能性があります-それについてはわかりません:-()
于 2009-07-27T10:52:54.923 に答える
1

ヘッダーとフッター、プロファイルビットなど、ajaxをまったく使用せずに、サーバー上に静的ページを作成してみませんか?ページが静的な場合は、JavaScriptを使用してコンテンツを読み込む必要はありません。

javascriptを使用してロードする必要がある場合は、Vexのソリューションが適しています。ページのレンダリング方法を制御するいくつかのオプションのパラメーターをajax呼び出しで渡すことができます。そうすれば、含まれるページはそれを使用するページについて知る必要はなく、レンダリング方法を指示するパラメーターを理解する必要があります。自体。その後、より簡単に再利用できます。

ただし、コードにエラーがあることに気づきました。これはおそらく期待どおりに機能しません。

$ispage = "";
foreach ($array as $value) {
    if ($_SERVER['HTTP_REFERER'] != $value) {
        $ispage = "";
    } else {
        $ispage = "woot";
    }
}

ページ名が一致しているが、次の名前が一致していない場合、$ispageは''に戻されます。次のようなことをしたほうがいいでしょう。

$ispage = "";
foreach ($array as $value) {
    if ($_SERVER['HTTP_REFERER'] == $value) {
        $ispage = "woot";
        break;
    }
}

また

$ispage = '';
if (in_array($_SERVER['HTTP_REFERER'], $array)) {
    $ispage = 'woot';
}
于 2009-07-27T10:53:50.773 に答える
0

タイクチン-

リンクを次のようにフォーマットする場合:

<a href="http://www.this-is-a-link.html?setvariablehere=yes">link</a>

次に、phpはこれである必要があります:

if (isset($_REQUEST['setvariablehere']) ) {
    do something for when variable IS set
} else {
    do something for when variable IS NOT set
}
于 2009-08-10T08:09:30.303 に答える