Laravel PHP 获取引用

Posted

技术标签:

【中文标题】Laravel PHP 获取引用【英文标题】:Laravel PHP get referer 【发布时间】:2018-05-25 20:59:43 【问题描述】:

我在子域中有一个登录按钮,它在主域上调用 AJAX 请求。为了使 CORS 正常工作,我必须拥有发出请求的正确域,以便在主域上对其进行验证。

我不能使用确切的子域,因为我有超过 3k 个子域都可以发出请求,而且我也不能动态地将它们全部添加到每个请求中,因为这会增加不必要的负担。

我想要的是一种从请求中以某种方式提取引用的方法,但 $_SERVER['HTTP_REFERER'] 并不总是起作用。

是否有某种方法可以每次都毫无例外地获取引用者,以便我确定引用者已设置?

如果没有,有没有办法强制将引用标头附加到请求中?

【问题讨论】:

不,http是无状态协议 由用户发送正确的推荐人。如果他们不这样做,那么他们可能已经深度链接到该页面,并且 CORS 应该阻止他们这样做。是否存在未设置引荐来源网址的常规用例? HTTP Referer 不可靠,期间。这不是应该的。您需要为您的问题找到不同的解决方案。如果您希望我们提供帮助,您需要更详细地描述您要解决的问题。 例如,如果您说您有 3k 个子域,我希望这些子域是“虚荣”子域(例如 username.example.com),它们最终都通过同一个主 Web 服务器提供服务。在这种情况下,适当的解决方案可能是不向example.com 提出请求,而是向username.example.com 提出请求,从而消除任何CORS 问题…… 如果您的所有域都是主域的子域,那么您可以允许来自同一域的来源并在客户端设置 document.domain (developer.mozilla.org/en-US/docs/Web/API/Document/domain) 如果不是,您可以尝试htaccess 解决方案(请参阅***.com/questions/14003332/…)无论如何,如果您使用referer,您需要依赖用户发送它。 【参考方案1】:

您可以根据自己的喜好使用以下内容

//Get the current URL without the query string.
url()->current();

//Get the current URL including the query string.
url()->full();

//Get the full URL for the previous request or the http refer er.
url()->previous();

这些方法中的每一个也可以通过 URL 门面访问:

use Illuminate\Support\Facades\URL;
URL::current();
URL::full();
URL::previous();

Laravel Doc

【讨论】:

【参考方案2】:

是的,有一种简单的方法可以强制将引用标头附加到请求中。它只需要对前端代码做一点小改动,而且非常简单:

只需通过将引用地址添加为 URL 参数来显式发送它。

http://www.yourdomain.com/login?referer=sub.yourdomain.com

查询参数已在预检请求中发送,并且可以由后端评估以设置正确的 CORS 标头。

【讨论】:

以上是关于Laravel PHP 获取引用的主要内容,如果未能解决你的问题,请参考以下文章

升级 Laravel 5.6 的 Envoyer 部署失败引用不匹配的 PHP 版本

laravel根目录的PHP文件中怎么引用门面类或辅助函数?

【PHP】laravel中获取当前路由名称

【PHP】laravel怎么获取网址里面的参数

php中laravel框架的控制器如何获取路由传过来的可选参数?

【PHP】laravel怎么获取网址里面的参数