14

$_SERVER['HTTP_REFERER']アプリケーションで変数を使用しました(PHPを使用)。Firefox では、上記の変数は wokring です。しかし$_SERVER['HTTP_REFERER']、Microsoft Internet Explorer 8 では動作しないことがわかりましたHTTP_REFERER。変数が MSIE8 と MSIE7 では動作しないことも知りました。

変数を使用$_SERVER['HTTP_REFERER']してMSIE7/8を取り除く方法、または$_SERVER['HTTP_REFERER']変数の他の代替手段はありますか?

ご提案いただきありがとうございます。

-プラビン。

4

2 に答える 2

27

Web サイトの内部でのみリファラー情報を使用する必要がある場合 (つまり、外部ではなく、Web サイトのページ間)、ユーザーのリファラー情報を手動で追跡できます。

// Get the full URL of the current page
function current_page_url(){
    $page_url   = 'http';
    if(isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on'){
        $page_url .= 's';
    }
    return $page_url.'://'.$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI'];
}

/* (Assuming session already started) */
if(isset($_SESSION['referrer'])){
    // Get existing referrer
    $referrer   = $_SESSION['referrer'];

} elseif(isset($_SERVER['HTTP_REFERER'])){
    // Use given referrer
    $referrer   = $_SERVER['HTTP_REFERER'];

} else {
    // No referrer
}

// Save current page as next page's referrer
$_SESSION['referrer']   = current_page_url();

次に、リファラーにアクセスするには、$referrer変数を使用するだけです。

if(isset($referrer)){
    echo 'Referred from "'.$referrer.'"';
    echo '<a href="'.$referrer.'">Back</a>';
} else {
    echo 'No referrer';
}

そうすれば、ユーザーがhttp://www.example.com/page_1.phpにアクセスすると、ブラウザが提供している場合はリファラー情報が表示されますが、提供されていない場合はリファラーは表示されません。その後http://www.example.com/page_2.php、サイトの および後続のページにアクセスすると、リファラーにアクセスできるようになります。

于 2011-02-22T01:41:26.307 に答える
1

セッションを使用してリファラーを推測しないでください。これにより、望ましくない動作や奇妙なエラーが発生します。

参照ページを本当に知りたい場合は、リクエスト パラメータを介して渡します。パラメータは、JS スクリプトまたはサーバー側で追加できます。

ページ上のすべてのリンクの jQuery バリアント:

$(document).ready(function(){
    $('a').on('click', function(e) {
        url = this.getAttribute('href');
        // Check if the page is internal.
        if (url.charAt(0) != '/') {
            return;
        }
        e.preventDefault();
        // Append referrer.
        url += url.indexOf('?') === -1 ? '?' : '&';
        url += 'referer=' + encodeURIComponent(document.URL);
        window.location = url;
    });
});
于 2016-02-13T22:21:52.057 に答える