Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/259.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP后退按钮的终极HTTP_REFERER解决方案?_Php_Javascript_Back Button_Http Referer_Strpos - Fatal编程技术网

PHP后退按钮的终极HTTP_REFERER解决方案?

PHP后退按钮的终极HTTP_REFERER解决方案?,php,javascript,back-button,http-referer,strpos,Php,Javascript,Back Button,Http Referer,Strpos,是的,我知道,另一个HTTP_REFERER努力。我一看到它就畏缩。但它已经交给了我,作为一个“返回”问题的解决方案,它实际上是有效的,所以 …问题是,我对它的理解还不足以让我觉得在现场部署它很舒服 我在这里已经浏览了很多关于HTTP\U REFERER的危险的消息,但是我被告知这段代码针对这个特定任务解决了这些问题。。。但我不相信 因此,我的问题在下面代码的底部-但首先,这是它背后的基础: 此代码进入购物车。它提供了用户单击“查看购物车”后“继续购物”按钮的操作。它的目标是提供最合适的(或预期

是的,我知道,另一个HTTP_REFERER努力。我一看到它就畏缩。但它已经交给了我,作为一个“返回”问题的解决方案,它实际上是有效的,所以

…问题是,我对它的理解还不足以让我觉得在现场部署它很舒服

我在这里已经浏览了很多关于HTTP\U REFERER的危险的消息,但是我被告知这段代码针对这个特定任务解决了这些问题。。。但我不相信

因此,我的问题在下面代码的底部-但首先,这是它背后的基础:

此代码进入购物车。它提供了用户单击“查看购物车”后“继续购物”按钮的操作。它的目标是提供最合适的(或预期的)重定向,返回到用户来自的地方

默认情况下,在没有添加此代码的情况下,此特定“查看购物车”页面的“继续购物”按钮只会将用户带到购物车的主页-如果用户浏览了几个页面以查找一组产品或特定类别,或者正在查看某个产品等,这将是一种打击。因此,我们希望对此进行改进。此外,购物车需要javascript来完成购买,如果用户在关闭JS的情况下访问,就会收到警告,因此在该操作期间,用户需要打开JS。最后,我们希望将解决方案保留为单个代码块,这样就可以轻松地应用它并将其传输到购物车的更新版本,而不会产生什么问题

向我描述的方法:

  • 如果设置了一个referer,但它不是空的,并且它确实包含此购物车的域,那么

    1a。如果referer是购物车页面本身,请应用javascript(-1)效果,否则我们将被困在一个地方

    1b。否则继续并应用Referer-Done

  • 否则,如果设置了一个引用,并且它不是空的,但不包含此购物车的域,则

    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)';
        }
    }
    
    我的问题是:

  • 好的,我们结合了两种可疑的方法,总的来说似乎是有效的。但这(安全/功能)会出什么问题?这里有一个我错过的止损人吗

  • 第二部分(2和2a)将完成什么?有人向我解释说,这是一种努力,以确定是否有人故意试图提供虚假的推荐人-但这对我来说没有意义-为什么我们要将此人发送到主页,而不是使用javascript(-1)方法

  • 有改进的想法吗?那些总是很容易得到;-)


  • 感谢您抽出时间来帮助我们……

    Referer只是用户在进入购物车之前访问的最后一页

  • Javascript:history.go()包含一个类似于referer的访问页面数组,因此它可以向用户发回历史记录中的页面。我不知道这是什么风险,除非购物车没有超时。但我不是一个很安全的人,所以最好让有更多知识的人来解释那里的风险

  • 如果用户直接从其他网站跳入购物车,那么确实应该有问题,与其把他们留在那里,不如将他们发送到主页。在这种情况下,java是一种客户端软件,因此它不会有浏览您的站点的历史记录,以便将用户发送到您的主页

  • 如果你真的不喜欢referer,面包屑总是另一种选择,或者$\u SESSION['previousPage']=


  • 如果我错了,请更正。

    referer由客户提供,不可靠。在会话变量中存储查看的最后一页可能会更好。您好,谢谢。。。这是这篇文章的重点。。。这个问题应该在代码中解决,通过检查referer(1)是否存在,(2)是否为空,以及(3)是否包含购物车的域,然后默认为javascript方法。。。它也满足了我们自给自足的要求。我知道有更好的解决方案,包括会话变量等。但在本例中,我会特别关注这个http_referer版本,看看它在这个应用程序中是否可行……永远不要依赖JavaScript作为后备方案@内华达州-谢谢你的回复。。。这是因为它可能无法提供吗?还是有其他原因?我最初考虑在“查看购物车”模板中添加一个noscript标记,在没有JS的情况下显示一个链接将用户带到主页(这是该链接的默认操作)——但由于购物车的大多数关键功能都需要javascript,那些关闭JS的人已经看到一条带有链接的消息,可以访问我们的静态目录,因此,在这种情况下,他们不太可能尝试浏览在线购物车。是的,没有JS的人数量不多,但那些费劲关闭(或安装NoScript)的人通常会更恼火!非常感谢您的回复。。。哈哈哈“如果你真的不喜欢referer”。。。嘿,我想喜欢它!!;-)。。。主要是从安全角度来看,我不信任它,这是我最大的担忧。主页上的问题很重要。。。我想,如果它能够检测到用户来自外部站点,直接进入“购物车视图”,那么将他们发送到主页至少会将他们保留在商店中,而不会将他们发送回原始站点。当然,如果没有referer,那么javascript默认值会将它们发回。。。但似乎是一次不太可能的访问。。。?Txunlike,但并非不可能。尤其是当有人试图破解你的购物车时;)