如何检测网页访问来源?无需URL参数识别Telegram等渠道来源
判断访问是否来自Telegram(无GET参数、无Referrer场景)
当用户通过Telegram内置浏览器打开链接时,即使$_SERVER['HTTP_REFERRER']为空,也可以通过请求头特征来识别;邮件渠道因无统一可识别标识,无法直接判断,以下是针对Telegram的实现方案:
核心判断依据
Telegram内置浏览器发起请求时,会携带特定的请求头标识,主要分为两类:
1. User-Agent字段特征
Telegram移动端、桌面端的内置浏览器,其User-Agent字符串中必然包含Telegram或TelegramDesktop关键字,示例格式:
Mozilla/5.0 (Linux; Android 13; Pixel 7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Mobile Safari/537.36 Telegram/10.5.0
2. 自定义HTTP头(可选补充)
部分版本的Telegram会额外发送X-Telegram-Start-Param或X-Telegram-Share-Url自定义头,但这类头仅在特定场景存在,不能作为唯一判断依据。
PHP代码实现
直接读取$_SERVER全局变量中的请求头信息进行判断:
function isFromTelegram() { // 优先检查User-Agent中的Telegram标识 $userAgent = isset($_SERVER['HTTP_USER_AGENT']) ? strtolower($_SERVER['HTTP_USER_AGENT']) : ''; if (str_contains($userAgent, 'telegram') || str_contains($userAgent, 'telegramdesktop')) { return true; } // 可选:补充检查Telegram自定义请求头 $hasTelegramCustomHeader = isset($_SERVER['HTTP_X_TELEGRAM_START_PARAM']) || isset($_SERVER['HTTP_X_TELEGRAM_SHARE_URL']); if ($hasTelegramCustomHeader) { return true; } return false; } // 使用示例 if (isFromTelegram()) { echo "访问来自Telegram"; } else { echo "访问非Telegram来源"; }
注意事项
- 邮件渠道无法通过此方式判断:邮件客户端的请求头无统一标识,且Referrer通常为空,没有可靠的识别依据。
- User-Agent存在被伪造的可能,若需更高准确性,可结合Telegram官方的Web App机制(但该方案需配合Telegram Bot,超出当前无参数的需求范围)。
内容的提问来源于stack exchange,提问作者Vito Bryliano
相关产品推荐
相关产品推荐

