You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无法在Session中保存初始HTTP_REFERER的技术求助

问题分析与解决方案

你的核心问题是每次请求都会覆盖$_SESSION['originalref']的值:当用户从domain.com进入第一个页面时,session里正确保存了domain.com;但跳转到站内其他页面时,当前的HTTP_REFERER变成了本站域名,代码又把session里的原始来源替换成了本站域名,导致后续的权限判断失败。

咱们只需要调整逻辑,仅在用户第一次访问(session中没有原始来源记录)时,才保存初始的HTTP_REFERER,之后不再更新这个session值即可。

修改后的完整代码

<?php 
// Start the session
if (session_status() == PHP_SESSION_NONE) {
    session_start();
}
?>

<?php 
// Getting referer and saving - 仅在session无原始来源时设置
$server = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '';
$referer = parse_url($server);
$refererhost = isset($referer['host']) ? $referer['host'] : '';

// 关键改动:只有session中没有originalref时才赋值,避免后续跳转覆盖
if (!isset($_SESSION['originalref'])) {
    $_SESSION['originalref'] = $refererhost;
}
?>

<?php if ($_SESSION['originalref'] == 'domain.com'): ?>
<!doctype html>
<html>
<head>
</head>
<body>
<p>Allowed.</p>
</body>
</html>
<?php else: ?>
<!doctype html>
<html>
<head>
</head>
<body>
<p>Not allowed. Debug: <?= $_SESSION['originalref'] ?></p>
</body>
</html>
<?php endif; ?>

额外说明

  • 如果用户是直接输入网址访问(没有HTTP_REFERER),$_SESSION['originalref']会是空字符串,这时候会触发“Not allowed”。如果你想允许直接访问,可以在判断里添加额外条件,比如:
    <?php if ($_SESSION['originalref'] == 'domain.com' || empty($_SESSION['originalref'])): ?>
    
  • 你已经明确知晓HTTP_REFERER可被伪造且当前机制符合需求,这个逻辑就能完美解决站内跳转被拦截的问题。

内容的提问来源于stack exchange,提问作者JudgeB

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 07:47:36