Oui je sais, un autre effort HTTP_REFERER. Je grince des dents quand je le vois. Mais il m'a été remis comme une solution à un problème de «retour en arrière» et cela fonctionne réellement, alors ...La solution HTTP_REFERER ultime pour le bouton retour PHP?
... le problème est, je ne le comprends pas assez pour se sentir à l'aise de le déployer en direct .
Je suis passé par beaucoup de messages ici sur les dangers de HTTP_REFERER, mais je me dit que ce code leur adresse pour cette tâche ... mais je ne suis pas convaincu.
Alors, mes questions sont au bas du code ci-dessous - mais d'abord, voici la base derrière:
Ce code va dans un panier. Il fournit l'action du bouton "Continuer les achats" après qu'un utilisateur a cliqué sur "Voir panier". Son but est de fournir la redirection la plus appropriée (ou attendue) à l'origine de l'utilisateur. Par défaut, sans ce code ajouté, le bouton «Continuer à faire du shopping» de cette page particulière «panier d'achat» amène simplement l'utilisateur à la page d'accueil du chariot - sorte de coups si l'utilisateur a navigué quelques pages profond pour trouver un ensemble de produits ou une catégorie spécifique, ou regardait un produit, etc. Donc nous voulons améliorer cela. En outre, le panier requires javascript pour effectuer un achat, que l'utilisateur est averti s'ils visitent avec JS off, alors JS sur devrait de l'utilisateur lors de cette opération. Enfin, nous voulions garder la solution à un seul bloc de code, de sorte qu'il peut être appliqué facilement et transportés dans des versions mises à jour du panier avec peu de question.
La méthodologie qu'il m'a été décrite:
Si réferrent est réglé et il est vide et oui il ne contient le domaine alors
1a de ce panier. Si le referer est la page du panier lui-même, appliquer un javascript (-1) effet, nous allons par ailleurs être coincé dans un endroit
1b. SINON allez-y et appliquez le Referer - Done.
ELSE si un refer est réglé et que ce n'est pas vide, mais pas elle ne contient pas le domaine de ce panier puis
2a. Quelque chose ne va pas, envoyez-les à la page d'accueil. (?? pourquoi ??)
2b. ELSE appliquons l'effet javascript (-1). - Terminé.
Le code:
if ((isset($_SERVER['HTTP_REFERER']) && !empty($_SERVER['HTTP_REFERER']) && (strpos($_SERVER['HTTP_REFERER'], HTTP_SERVER) === 0))) {
if ($_SERVER['HTTP_REFERER'] == HTTP_SERVER . 'index.php?r=cart') {
$this->data['continue'] = 'javascript:history.go(-1)';
}
else {
$this->data['continue'] = html_entity_decode($_SERVER['HTTP_REFERER']);
}
}
else {
if ((isset($_SERVER['HTTP_REFERER']) && !empty($_SERVER['HTTP_REFERER']) && (strpos($_SERVER['HTTP_REFERER'], HTTP_SERVER) !== 0))) {
$this->data['continue'] = 'index.php?r=home';
}
else {
$this->data['continue'] = 'javascript:history.go(-1)';
}
}
Mes questions:
Ok, donc nous avons combiné deux méthodes suspectes, et il semble que collectivement au travail. Mais qu'est-ce qui peut mal tourner avec ça (Sécurité/Fonction)? Y a-t-il un showstopper ici qui me manque?
Que va accomplir la deuxième partie (2. et 2.a.)? On m'explique que c'est un effort pour déterminer si quelqu'un essaye délibérément d'alimenter un faux référent - mais cela n'a pas de sens pour moi - pourquoi nous soucions-nous de diriger cette personne vers la page d'accueil par rapport au javascript (-1) méthode?
des réflexions sur l'amélioration? Ceux viennent toujours handly ;-)
Nous vous remercions de votre temps pour aider à cette ...
Le référenceur est fourni par le client et n'est pas fiable. vous auriez probablement plus de chance de stocker la dernière page affichée dans une variable de session. – dqhendricks
Bonjour, merci ... c'est un point clé de ce post ... ce problème est * soi-disant * adressé dans le code, en vérifiant si le referer (1) existe, (2) n'est pas vide, et (3) contient le domaine du panier, puis par défaut à la méthode javascript ... il répond également à notre exigence d'être autonome. Je sais qu'il existe de meilleures solutions impliquant des variables de session, etc. mais dans ce cas j'essaie de me concentrer spécifiquement sur cette version de http_referer, pour voir si elle est viable dans cette application ou pas ... – Soyo
Ne comptez jamais sur JavaScript en tant que se retirer! –