【发布时间】:2011-05-06 17:45:37
【问题描述】:
是的,我知道,另一个 HTTP_REFERER 努力。当我看到它时,我畏缩。但它已作为“返回”问题的解决方案交给我,它确实有效,所以......
...问题是,我对它的理解还不够,无法在现场部署它。
我在这里阅读了很多关于 HTTP_REFERER 危险的消息,但是我被告知这段代码针对这个特定任务解决了这些问题......但我不相信。
所以,我的问题在下面代码的底部 - 但首先,这是它背后的基础:
此代码进入购物车。它在用户单击“查看购物车”后提供“继续购物”按钮的操作。它的目标是提供最合适的(或预期的)重定向到用户来自的地方。
默认情况下,如果不添加此代码,此特定“查看购物车”页面的“继续购物”按钮只会将用户带到购物车的主页 - 如果用户已经浏览了几页深度,这有点打击查找一组产品或特定类别,或者正在查看产品等。所以我们希望对此进行改进。此外,购物车需要 javascript 才能完成购买,如果用户在关闭 JS 的情况下访问,则会警告用户,因此在此操作期间用户需要打开 JS。最后,我们希望将解决方案保留在单个代码块中,以便可以轻松应用并传输到购物车的更新版本而几乎没有问题。
向我描述的方法:
-
如果设置了推荐人并且它不为空并且是的它确实包含此购物车的域,那么
1a。如果引用者是购物车页面本身,请应用 javascript (-1) 效果,否则我们会卡在一个地方
1b。 ELSE 继续申请Referer - 完成。
-
ELSE 如果设置了推荐并且它不为空但不包含此购物车的域然后
2a。有问题,发到主页。 (??为什么??)
2b。 ELSE 让我们应用 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)';
}
}
我的问题:
好的,所以我们已经结合了两种可疑的方法,总的来说它似乎有效。但是这个(安全/功能)会出现什么问题?这里有我想念的表演者吗?
第二部分(2. 和 2a.)要完成什么?我解释说这是为了确定是否有人故意尝试提供虚假推荐人-但这对我来说没有意义-为什么我们关心将该人路由到主页而不是使用 javascript ( -1) 方法?
有任何改进的想法吗?那些总是派上用场;-)
感谢您抽出宝贵时间帮助解决此问题...
【问题讨论】:
-
referer由客户提供,不可靠。您可能会更幸运地将查看的最后一页存储在会话变量中。
-
您好,谢谢...这是这篇文章的重点...应该在代码中解决了这个问题,方法是检查引用者 (1) 是否存在, (2)不为空,(3)包含购物车的域名,然后默认使用javascript方法……也符合我们自包含的要求。我知道有更好的解决方案涉及会话变量等,但在这种情况下,我试图专门关注这个 http_referer 版本,看看它在这个应用程序中是否可行......
-
永远不要依赖 JavaScript 作为后备!
-
@Nev - 感谢您的回复...是因为它可能不可用吗?还是有其他原因?我最初考虑在“查看购物车”模板中添加一个 noscript 标记,当没有 JS 时显示一个链接以将用户带到主页(无论如何这是该链接的默认操作) - 但由于购物车的大部分内容都需要 javascript关键功能,关闭 JS 的用户已经看到带有访问我们静态目录的链接的消息,因此他们不太可能在这种情况下尝试浏览在线购物车。
-
是的,没有 JS 的人很少,但那些费尽心思关掉它(或安装 NoScript)的人通常会更恼火!
标签: php javascript back-button http-referer strpos