2010-02-08 2 views
3

Existe-t-il un moyen d'interroger une requête pour déterminer la méthode de navigation?Entrée de la barre d'adresse par rapport au lien

(en utilisant une configuration LAMP, PHP)

En d'autres termes ... Je voudrais savoir si l'entrée a été tapé dans la main la barre d'adresse, ou un lien/signet a été utilisé.

Répondre

3

Vous pouvez vérifier la variable $_SERVER['HTTP_REFERER'] qui contiendra l'URL à partir de laquelle la personne a navigué. Je ne suis pas sûr de ce qui se passe s'ils choisissent un signet ou saisissent l'URL manuellement, bien que je suspecte que cette variable soit vide.

Bien que, comme il est dit dans the manual:

L'adresse de la page (le cas échéant) qui a renvoyé l'agent utilisateur à la page en cours. Ceci est défini par l'agent utilisateur. Tous les agents utilisateurs ne définissent pas cela, et certains fournissent la possibilité de modifier HTTP_REFERER en tant que fonctionnalité. En bref, on ne peut pas vraiment faire confiance.

2

De manière fiable, vous ne pouvez pas.

Une méthode que vous pouvez essayer est des en-têtes de referer (qui est comment épelé dans la spécification), généralement envoyé par le navigateur pour indiquer d'où l'utilisateur vient. En PHP, ceci est disponible en $_SERVER['HTTP_REFERER'].

La plupart des navigateurs modernes (j'ai testé Google Chrome et Firefox) envoient un en-tête de referer sur les clics de lien et pas lors de la saisie directe - c'est-à-dire si les paramètres de l'utilisateur le font par défaut. Une autre option, en fonction de ce que vous voulez vraiment, est d'ajouter une sorte de variable de session générée aléatoirement à l'URL du lien et, à la réception d'une requête, de voir si le jeton dans l'URL correspond au jeton dans la session de l'utilisateur. Si oui, voilà. Sinon, ce lien a été copié-collé.

Bien sûr, toutes ces méthodes peuvent facilement être battues, et votre serveur peut être trompé. Ne comptez pas sur eux.

+0

Tout droit. Super Info. C'est en fait pour les deux, la présentation et l'authentification. – eleete

+1

Si vous souhaitez réellement vous authentifier, puis le sécuriser dans une certaine mesure, vous devrez ajouter une clé secrète par utilisateur à l'URL. C'est la seule façon fiable à 100%. – Matchu

+0

+1, la seule façon d'être sûr est d'utiliser une sorte de clé en constante évolution (probablement stockée dans la session) pour valider qu'un lien a été cliqué. La clé doit être régénérée à chaque fois que la page est consultée, mais quelque chose d'aussi simple qu'un court hachage du temps + l'adresse IP de l'utilisateur devrait suffire. – Dereleased

0

S'ils cliquent sur un lien le navigateur établira un referrer, vous pourriez détecter la présence d'un en-tête referrer en utilisant

$_SERVER['HTTP_REFERER'] 

et vérifier pour voir si cela a été défini. Si elle est vide, la personne a tapé l'URL ou a une extension de navigateur pour effacer les sites référents. C'est à peu près aussi proche que vous obtiendrez une solution sur celui-ci.

0

Tout ce que vous pouvez faire est de regarder le $SERVER['HTTP_REFERER'] [sic]. Si vous étiez directement lié, il y a de fortes chances que vous trouviez l'URL de la page qui vous a été liée. Il y a beaucoup de circonstances où vous ne l'obtiendrez pas, donc vous ne pouvez pas compter dessus.

Dans IE, il est possible de détecter lorsque vous êtes chargé à partir d'un signet, si vous avez précédemment utilisé un comportement saveFavorite pour conserver certaines données avant que l'utilisateur ne vous marque. Mais c'est plutôt moche.

+0

cela fonctionne-t-il sur les liens e-mail, dans tous les clients de messagerie? ou au moins Thunderbird, Outlook, Eudora? – eleete

+0

Probablement pas, puisque les clients de messagerie n'ont pas exactement une URL à placer dans le referer. – Matchu

+0

Non. Mais lorsque vous envoyez un courrier, il est courant d'inclure une partie '? Parameter = something' dans l'URL pour indiquer que le lien provient d'un courrier électronique. – bobince

Questions connexes