[原創(chuàng)]dedecms使用cdn后獲取真實ip的方法
dedecms 是一個非常受歡迎的開源 PHP CMS 系統(tǒng),常常被用于網(wǎng)站建設。當使用 CDN 時,由于訪問者的請求是通過 CDN 節(jié)點轉(zhuǎn)發(fā)的,因此在網(wǎng)站后臺獲取用戶真實 IP 會變得更加困難。下面是一種獲取真實 IP 的方法。 首先,可以在網(wǎng)站程序的入口文件 index.php 中增加以下代碼: ```php // 判斷是否使用 CDN,并獲得真實IP if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) { $ip_list = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']); $real_ip = trim(end($ip_list)); } else { $real_ip = $_SERVER['REMOTE_ADDR']; } ``` 在這個代碼中,首先通過判斷 `HTTP_X_FORWARDED_FOR` 變量是否存在,來確定是否使用了 CDN。如果存在,將該變量的值進行分隔,再取最后一個 IP 地址作為真實 IP,最后進行修剪處理。如果該變量不存在,則使用 `REMOTE_ADDR` 取得客戶端的真實 IP。 然后,將取得的真實 IP 保存在一個 SESSION 中,方便后面的使用: ```php // 設置SESSION session_start(); $_SESSION['real_ip'] = $real_ip; ``` 最后,在需要使用真實 IP 的地方,通過讀取 SESSION 中的真實 IP 來獲?。? ```php // 讀取SESSION session_start(); $real_ip = $_SESSION['real_ip']; ``` 注意:這種方式的前提是 CDN 能夠傳遞 HTTP_X_FORWARDED_FOR 變量。有部分情況下,CDN 會給 HTTP_X_FORWARDED_FOR 變量賦一個固定的值,這時以上方法就不能正確獲取到真實 IP。如果需要更加精細的 IP 地址信息,還需要進一步處理。 另外,如果使用了多個 CDN,需要從 HTTP_X_FORWARDED_FOR 中取出最后一個 IP,即最近一個 CDN 的 IP。否則,還是取到的是最初的用戶 IP 地址。