一、跳转的原理与HTTP状态码
原理概述
在 Web 应用中,页面跳转的本质是服务器返回一个HTTP 响应,指示浏览器加载新的资源。核心要点包括 3xx 系列状态码、Location头,以及浏览器对 3xx 响应的跟随行为,从而完成页面跳转的过程。
当服务器通过 Location头部携带跳转目标时,浏览器会自动发起新的请求,这就是我们常说的跳转的实现机制。
常见状态码
常用的跳转状态码包括 301、302、303、307 等。301 永久跳转意味着资源已永久移动,搜索引擎会将新 URL 视为长期地址;302/303/307 临时跳转通常用于临时性变更,不应影响原始 URL 的权重。
在设计跳转策略时,要结合 SEO、浏览器行为 与用户体验来选择合适的状态码。
二、最常用的跳转实现方式
使用 header('Location') 的基本要点
在 PHP 中,跳转通常通过 header('Location: ...') 实现。要点包括:在发送任何输出前执行、立即结束脚本以避免后续代码干扰、以及根据需要设置正确的 HTTP 状态码。
下面的示例演示了最常见的跳转用法及其要点,确保不会输出任何内容后再发送头部。
301 与 302 的区别
301 是永久跳转,搜索引擎会把新地址视为资源的长期地址;302、307 是临时跳转,原始地址保持有效。这在 SEO 与缓存策略上有不同影响,应根据实际需求选择。
下面的代码展示了如何发出一个永久跳转的响应:
三、在跳转中传值的多种方案
通过URL查询参数传值
最直观的传值方式是把参数附在跳转的查询字符串中,目标页面通过 $_GET 获取并处理。需要确保对参数进行URL 编码,避免特殊字符 interfering。
在目标页使用 $_GET['user_id'] 获取参数值并进行校验。
通过会话(Session)传值
使用 Session 可以跨跳转安全传递数据,避免敏感信息暴露在 URL 上。需要在跳转前调用 session_start(),并在跳转后读取会话数据。
目标页面通过 $_SESSION 获取并显示或处理该数据,然后按需清理。

Post-Redirect-Get (PRG) 模式
PRG 模式通过 POST 提交后进行重定向,避免表单重复提交带来的副作用。通常结合 会话来传递短暂信息。
在目标页读取 $_SESSION['flash'],渲染后再清理该消息以避免重复显示。
四、安全与兼容性注意事项
防止open redirect
如果跳转 URL 来自用户输入,务必进行严格校验,避免将任意地址作为跳转目标,防止开放重定向被利用进行钓鱼或劫持跳转。实现要点包括:对目标进行白名单校验、限定为应用内相对路径或受信任域。
避免敏感信息暴露
尽量不要把用户名、密码等敏感信息放在 URL 参数中,优先使用Session或服务器端存储来传递状态。
五、实战案例:从登录到仪表盘
场景描述与实现目标
在实际应用中,登录表单提交后通常需要经过一个跳转流程:完成认证后跳转到仪表盘,并通过 Session 保持用户信息以实现跨页访问。
完整实现代码示例
以下给出一个简化的登录跳转与仪表盘展示的完整实现,包含输入接收、校验、跳转与会话管理,演示从登录到仪表盘的完整流程。
仪表盘
欢迎,
你已经通过登录跳转完成认证,当前会话保持有效。


