0

Wordpress ページの非表示のフォーム フィールドに 3 つのものを入れようとしています。

  1. 誰かが私のサイトのいずれかのページにアクセスする前に最後にアクセスした「オフサイト」ページ (たとえば、Google ページの可能性が高い)

  2. 彼らが私のサイトで最初に訪れたページ

  3. フォーム ページに移動する前のサイトの最後のページ

3 つ目は簡単ですが ( を使用するだけです)、最初の 2 つでは問題が発生します。

セッション変数を使用して #1 と #2 を保存しようとしているので、すべてのページのヘッダーに次のコードがあります。

<?php
session_start();
if (! isset($_SESSION['offsite_referer'])) {
  $_SESSION['offsite_referer'] = $_SERVER['HTTP_REFERER'];
}
if (! isset($_SESSION['first_page'])) {
  $_SESSION['first_page'] = $_SERVER['REQUEST_URI'];
}
?>

それからさらに下に、テストコードとして(後で input type=hidden などに変更されます):

<p>offsite_referer: <?= $_SESSION['offsite_referer'] ?></p>
<p>first_page: <?= $_SESSION['first_page'] ?></p>

(FWIW、wp-config.php の上部にも session_start() があります。はい、私のサイトでは register_globals がオフになっています。)

何らかの理由で、別のサイトからのリンクを介して直接フォーム ページ (/free-reports) にアクセスしても、$_SESSION['offsite_referer']が常に私のホームページになってしまいます。同様に、first_pageは常に/ として表示されます

はい、試行の間にすべての Cookie などをクリアして、新しいセッションを強制的に作成しています。

このコードは、Wordpress 以前のサイトで正常に動作していたので、WP と関係があるとしか思えません。具体的には WP のリダイレクト (.htaccess の WP の mod_rewrite のもの) と関係があるとしか思えません。

$_SESSION['offsite_referer'] = $_SERVER['HTTP_REFERER'] を wp_get_original_referer() に変更してみましたが、効果がないようでした。

ちなみに、フォーム ページ (/free-reports/) に自分のサイトの最初のページとしてアクセスし (Cookie などをクリアした後)、$_SERVER['HTTP_REFERER'] を印刷すると、最後のオフサイト ページが正しく表示されます。 $_SESSION['offsite_referer'] はしません。

私はかなり困惑しており、自分でそれを理解しようとかなりの時間を費やしてきたので、これを解決するための助けをいただければ幸いです.

4

2 に答える 2

0

ブラウザによってはリファラー URL を送信せず、無効にする人もいるため、リファラー URL を実際に取得できない可能性があります。

//first of all, initialize the session
session_start();
//Now call logvisit() to log where the user is coming from
logvisit();
function logvisit() {
         $_SESSION['offsite_referer'] = $_SERVER['HTTP_REFERER']);
         $browser = $_SERVER['HTTP_USER_AGENT']; //Gets the browser the user is using
         //If you want to test it (disable the code below if you don't want to print that information):
         echo "Offsite referer: $_SESSION['offsite_referer']<br>";
         echo "Browser: $browser<br>";
}

次に、使用できるセッションを破棄します。unset($_SESSION['offsite_referer']); これは私が通常行う方法であり、多くの場合、きちんとした方法です。

于 2012-10-25T16:53:53.680 に答える
0

私は IE を使用してテストを行っていたので、scunliffe がこれの鍵を握っていたと思います。

現在は問題なく動作していますが、これは実際に IE を閉じて再起動したことが原因だと考えています (Firefox では問題なく動作しますが、ご想像のとおり、Cookie を削除するだけではうまくいきません)。

また、サイトの最初と最後のページだけではなく、サイト内の完全な閲覧履歴をセッション変数に保存するように、少し変更を加えました。

最終的にコードは次のようになりました。これは、テーマの header.php ファイルの一番上にあります。

<?php
session_start();
if (! isset($_SESSION['site_history'])) {
   $_SESSION['offsite_referer'] = $_SERVER['HTTP_REFERER'];
   $_SESSION['site_history'] = '';
}
$_SESSION['site_history'] .= ($_SERVER['REQUEST_URI'] . ';');
?>

これを理解しようとしていたとき、私は元々 wp-config.php にも session_start() を持っていましたが、それを削除することができ (header.php に上記のコードだけを残して)、問題なく動作します。

誰かがこのページで同様のことをしたいと思っている場合に備えて、テーマの functions.php に以下を追加することで、WP ページでこの情報にアクセスできました。

function get_offsite_referer() { return $_SESSION['offsite_referer']; }
add_shortcode('offsite-referer', 'get_offsite_referer');
function get_site_history() { return $_SESSION['site_history']; }
add_shortcode('site-history', 'get_site_history');

次に、Wordpress ページ/フォームに情報を渡します。

<input type="hidden" name="offsite_referer" value="[offsite-referer]" />
<input type="hidden" name="site_history" value="[site-history]" />

scunliffe、コメントを「返信」として投稿した場合、それが私を正しい方向に最も密接に導いたので、それを「受け入れ」たでしょうが、コメントとして私はそれを支持することしかできなかったので、それが私がしたことです。ありがとう!

于 2012-10-25T20:09:28.970 に答える