URL :: previous()无法按预期工作

时间:2014-10-25 19:44:51

标签: laravel laravel-4 request

URL :: previous()函数始终返回我的基本URL 有人也遇到过这个问题吗?

2 个答案:

答案 0 :(得分:1)

URL::previous()方法使用 HTTP_REFERER 标题 但是这个标题是不可靠的,因为浏览器发送它(或浏览器不发送) More information on that topic

因此,您的浏览器不会发送(正确的)引用标头,或者您可能手动输入URL(在这种情况下,根本没有以前的URL)

答案 1 :(得分:0)

这是URL::previous()的一个已知问题,因为跨浏览器的HTTP_REFERER使用不一致(Chrome特别喜欢忽略它)。您可以通过一些变通方法手动处理此行为,方法是在重定向之前将当前URL存储在Session变量中,然后在重定向时将其从Session中检索(并清除)。您可以在http://gist.github.com/msurguy/5158026找到该实现。

这种方法的缺点是,如果用户在查看您的站点时打开了多个选项卡,您将得到不正确的行为,因为只有一个URL将存储在Session变量中。

为了尽可能准确,您可以使用内置的URL::previous()(如果可用),或者如果它不是,则使用会话变量解决方法作为后备。只需检查Request::header('referer')的值,如果它为空或包含您的根URL,则使用存储在Session变量中的回退。