2010-07-26 35 views
1

J'essaie de créer un effet de page splash sur un site sur lequel je travaille (je sais que les pages splash sont mauvaises, mais j'ai mes raisons), et en gros je voulez appeler le script qui exécute la superposition de l'image de démarrage uniquement si le visiteur arrive à l'index à partir d'un site Web externe. De cette façon, si un visiteur clique sur "home" à partir d'une page interne, le splash ne sera pas lancé. J'ai cherché à propos de et il semble que je peux le faire avec PHP en utilisant $ _SERVER ['HTTP_REFERER'], mais je suis tout nouveau à PHP et après avoir joué avec tout l'après-midi ne peut pas sembler le faire fonctionner.en utilisant php et HTTP_REFERER pour créer une condition de chargement js

Le code suivant charge le script, mais il ne semble pas se soucier si l'URL de référence contient « monsite » et un message d'erreur apparaît en haut de la lecture de la page:
« Une erreur PHP a été rencontré
gravité : Avis
message: Undefined index: HTTP_REFERER
Nom du fichier: ... »

<?php 
$referrer=$_SERVER['HTTP_REFERER']; 
if(stristr($referrer, "mysite") == FALSE) { 

echo ' 
<script type="text/javascript"> 
$(document).ready(function() { 

        $("#wrapper").hide(); 

     $("#imgContainer").npFullBgImg("/imgs/splash_image.jpg", {fadeInSpeed: 2000, center: true}); 
     $("#logoContainer").fullLogoImg("/imgs/splash_logo.png", {fadeInSpeed: 2000, center: true}); 
     $("#logoContainer").click(function(){ 

       $("#wrapper").show("fast"); 
       $("#splash_kill").remove(); 
       $(this).remove(); 

     }); 
}); 
    </script>'; 
} 
?> 

Toute aide serait grandement appréciée. Merci!

Répondre

3

L'avis vous indique qu'un HTTP_REFERER n'est pas défini.

'HTTP_REFERER' L'adresse de la page (le cas échéant) qui se réfère à l'agent utilisateur à la page courante . Ceci est défini par l'agent . Tous les agents utilisateurs ne définiront pas cela, et certains fournissent la possibilité de modifier HTTP_REFERER en tant que fonctionnalité. En court, il ne peut pas vraiment faire confiance.

http://php.net/manual/en/reserved.variables.server.php

Une recherche rapide a conduit à ce qui donne un peu plus en détail: http://www.electrictoolbox.com/php-http-referer-variable/

Mise à jour:

Vous pouvez essayer d'utiliser une variable de session. La variable peut être un simple booléen, qui est défini sur true si la page d'accueil a été affichée, false dans le cas contraire. Cela nécessite un traitement de session sur chaque page qui peut être un point d'entrée sur le site Web et/ou chaque page où vous souhaitez afficher le splash.

http://php.net/manual/en/function.session-start.php

Bien sûr, cela ne serait pas viable pendant toute la durée de la session. Donc, vous pourriez utiliser un cookie à la place ou avec cette approche.

Personnellement, j'opterais probablement pour l'approche de cookie simple, car c'est juste un splash. Pas besoin d'ajouter le surcoût des sessions pour quelque chose d'aussi simple.

0

Bien que vous ne puissiez pas vous fier complètement à $ _SERVER ['HTTP_REFERER'] pour être défini, je pense que vous trouverez qu'il est assez fiable pour une page d'accueil. Quand il n'est pas défini, il n'y a pas de référant et ce sera vide, car ce n'est pas dans l'en-tête.

Vous devez d'abord tester pour voir si vide ($ _ SERVER ['HTTP_REFERER']), puis vérifiez s'il contient votre propre domaine.Sur une autre note, je travaillais sur un ancien serveur IIS qui changeait le nom de certaines de ces variables $ _SERVER, et les gâchait généralement. Je ferais un print_r ($ _ SERVER) pour voir ce qui se passe.

1

C'est ce que j'essaie. Je ne suis pas sûr du caractère générique:

<?php 
//echo $ref 
$ref = $_SERVER["HTTP_REFERER"]; 
//if is NOT coming from inside linking 
if ($ref != '*www.example*') 
// send to index and exit 
{header("Location:http://www.example.com/index.php"); 
Exit; 
// 
} 
?> 
0
if(isset($_SERVER['HTTP_REFERER'])&&!empty($_SERVER['HTTP_REFERER'])) { 
    $http_referer=$_SERVER['HTTP_REFERER']; 
}