PHP URL参数重定向问题:登录后story参数丢失页面空白
问题:登录后重定向丢失story参数
我正在制作一个含多链接的首页,用户未登录时点击链接会跳转至登录页,登录后需继续访问原目标页面。作为PHP新手,可能遗漏了细节。
现有代码情况
首页链接格式
<p><a href="link.php?story=1">Link 1</a></p> <p><a href="link.php?story=2">Link 2</a></p>
登录文件重定向代码
$story_id = $_GET['story']; header("Location: link.php?story=".$story_id); exit();
遇到的问题
加载页面时,story_id参数未出现在URL中,页面空白,比如example.com/link.php?story=。但如果直接将$story_id设为具体数值(如5),URL会显示该数值且功能正常,可跳转至example.com/link.php?story=5。补充:已在header后添加exit();,但URL仍无参数。
问题原因
核心问题是登录页没有接收到原链接的story参数。用户点击首页链接后,会被拦截到登录页,但原链接的参数并未传递到登录页,导致登录后重定向时$_GET['story']为空值。
解决步骤
1. 修改首页链接,传递原目标地址到登录页
把首页的链接改为直接跳转到登录页,同时携带原目标页面的完整地址(包括story参数)。为避免参数解析错误,建议用urlencode()处理目标地址:
静态HTML链接(手动编码参数):
<p><a href="login.php?redirect=link.php%3Fstory%3D1">Link 1</a></p> <p><a href="login.php?redirect=link.php%3Fstory%3D2">Link 2</a></p>
PHP动态生成链接(更便捷):
<?php $story_list = [1, 2]; foreach ($story_list as $id) { $target_url = urlencode("link.php?story=$id"); echo "<p><a href='login.php?redirect=$target_url'>Link $id</a></p>"; } ?>
2. 修改登录页的重定向逻辑
登录验证通过后,获取传递过来的redirect参数,解码后重定向到目标页面。同时增加安全校验,防止恶意跳转:
// 替换为实际的登录验证逻辑(比如校验账号密码) $login_success = true; if ($login_success) { // 获取重定向地址,默认跳转到首页 $redirect_url = isset($_GET['redirect']) ? urldecode($_GET['redirect']) : 'index.php'; // 安全校验:只允许本站内地址跳转,防止钓鱼攻击 if (strpos($redirect_url, 'http') !== 0 && strpos($redirect_url, '//') !== 0) { header("Location: $redirect_url"); exit(); } else { // 非法地址,跳转到首页 header("Location: index.php"); exit(); } }
3. 原代码失效原因
原登录页直接尝试获取$_GET['story'],但用户访问登录页时,URL里并没有这个参数(用户是从首页跳转到登录页,而非直接带story参数访问),所以$story_id为空,导致重定向后URL的story参数也为空。
内容的提问来源于stack exchange,提问作者hadescode
相关产品推荐
相关产品推荐

