Да, я знаю, еще одно усилие HTTP_REFERER.Я съеживаюсь, когда вижу это.Но он был передан мне в качестве решения проблемы «возврата», и он действительно работает, поэтому ...
... проблема в том, что я не понимаю этого достаточно, чтобы чувствовать себя комфортно при развертываниион жив.
Я прочитал здесь много сообщений о рисках HTTP_REFERER, однако мне сказали, что этот код обращается к ним для этой конкретной задачи ... но я не уверен.
Итак, мои Вопросы находятся внизу кода ниже - но, во-первых, вот основа этого:
Этот код входит в корзину.Он обеспечивает действие кнопки «Продолжить покупки» после того, как пользователь нажмет «Просмотреть корзину».Его цель - предоставить наиболее подходящее (или ожидаемое) перенаправление назад туда, откуда пришел пользователь.
По умолчанию без добавления этого кода кнопка «Продолжить покупки» этой конкретной страницы «Просмотр корзины»просто переносит пользователя на домашнюю страницу корзины - такие удары, если пользователь перешел на несколько страниц вглубь, чтобы найти набор продуктов или определенную категорию, или смотрел на продукт и т. д. Поэтому мы хотим улучшитьна что.Кроме того, корзина требует JavaScript для завершения покупки, о чем пользователь предупреждает, если он заходит с выключенным JS, поэтому от пользователя ожидается включение JS во время этой операции.Наконец, мы хотели сохранить решение в виде единого блока кода, чтобы его можно было легко применять и переносить в обновленные версии корзины без особых проблем.
Методология, которая была мне описана:
Если задан реферер И он не пустой И да, он содержит домен этой корзины, тогда
1a.Если реферером является сама страница корзины, примените эффект javascript (-1), иначе мы застрянем в одном месте
1b.В противном случае примените Реферер - Готово.
В противном случае, если ссылка установлена И она не пустая, НО она не содержит домен этой корзины, тогда
2a,Что-то не так, отправьте их на домашнюю страницу.(?? почему ??)
2b.В противном случае давайте применим эффект javascript (-1).- Готово.
Код:
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)';
}
}
Мои вопросы:
Итак, мы объединили дваПодозреваемые методы, и все вместе, кажется, работает.Но что может пойти не так с этим (Безопасность / Функция)?Здесь есть showtopper, что я скучаю?
Чего ожидает вторая часть (2. и 2a.)?Мне объяснили, что это попытка определить, намеренно ли кто-то пытается накормить фальшивого реферера - но для меня это не имеет смысла - почему мы хотим направить этого человека на домашнюю страницу вместо использования javascript (-1) метод?
ЛЮБЫЕ мысли по улучшению?Они всегда приходят с умом; -)
Спасибо за то, что уделили нам время для помощи ...