首頁  >  文章  >  後端開發  >  Laravel中如何準確取得客戶端IP位址?

Laravel中如何準確取得客戶端IP位址?

Susan Sarandon
Susan Sarandon原創
2024-10-20 08:32:31723瀏覽

How to Get Client IP Address Accurately in Laravel?

在Laravel 5 取得客戶端IP 位址

使用$_SERVER["REMOTE_ADDR"] 在Laravel 位址中取得客戶端IP 位址似乎很簡單。然而,與核心 PHP 不同,Laravel 傳回伺服器的 IP,而不是訪客的。

為了解決這個問題,Laravel 使用 Request::ip()。此方法利用 Symfony 的請求物件來確定客戶端的 IP 位址。

在內部,Request::ip() 呼叫 getClientIps(),後者採用穩健的方法來擷取客戶端的 IP 位址。它首先取得伺服器的 IP 位址 (REMOTE_ADDR) 並檢查是否使用了可信任代理程式。

如果偵測到可信任代理,則會根據 Laravel 的可信任標頭配置檢查請求標頭。解析特定標頭(例如 X-Forwarded-For 和 X-Client-IP)以提取客戶端的 IP 位址。

但是,這些標頭可能不可靠,特別是當客戶端位於多個代理後面時。因此,請求的 IP 位址將會新增為 $clientIps 陣列中的最後一個元素。

然後選擇客戶端的 IP 位址作為 $clientIps 中的第一個元素。此 IP 位址可能是請求的 IP 或可信任代理程式之一。

為了確保準確性,$clientIps 中的每個 IP 位址都會根據可信任代理程式清單進行驗證。如果 IP 位址屬於受信任的代理,則會將其從陣列中刪除。

最終,Request::ip() 傳回一個 IP 位址陣列。此陣列的第一個元素表示不受信任的客戶端 IP 位址,後面跟著任何受信任代理的 IP。

以上是Laravel中如何準確取得客戶端IP位址?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn