【问题标题】:PHP or JS redirect to another page with reloading and url changingPHP 或 JS 通过重新加载和 url 更改重定向到另一个页面
【发布时间】:2015-05-13 19:48:32
【问题描述】:

我知道有很多类似的问题,但没有适合我的解决方案。

我有一个带有登录表单的 index.php。当用户尝试登录时,登录数据被发送到 login.php 这个文件检查用户名和密码是否有效。 如果是这样,则文件 map.php shell 被加载。 我为此找到的唯一可行的解​​决方案是: header("位置:map.php"); 但是当页面加载时,url 仍然是 ../login.php 我该如何更改呢?

另一个问题是,如果我从 pageB.php 转到 pageA.php,进行一些数据库更改,然后使用 header("Location: pageB.php"); 从 pageA.php 重定向回 pageB.php;然后 pageB.php 正在加载,但不显示更改的数据库条目,只显示旧条目。我怎样才能强制重新加载页面一次(意味着没有刷新:X)?

【问题讨论】:

  • 嗯 PHP 标头应该更改 URL。你确定你是真的被引导到 map.php 吗?
  • 对于下一个问题,尝试添加到 pageB.php: header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1 header("过期时间:星期六,1997 年 7 月 26 日 05:00:00 GMT"); // 过去的日期
  • 感谢您的回答。是的,我肯定会正确定向到 map.php,但 url 没有改变,仍然是 login.php。
  • 我已经尝试了一些 chache 选项: header('Expires: Sat, 26 Jul 1997 05:00:00 GMT'); header('Last-Modified:' .gmdate('D, d M Y H:i:s') .'GMT'); header('Cache-Control: no-store, no-cache, must-revalidate'); header('Cache-Control: post-check=0, pre-check=0', false); header('Pragma: no-cache');现在也是你的,但没有任何改变。还是谢谢。
  • 检查 PHP 我们是否使用缓存,比如 OpCache 之类的。

标签: javascript php redirect reload


【解决方案1】:

您的问题有点令人困惑,但处理客户端重定向的最佳方法是使用 Javascript,而不是从 PHP 发回的标头,除非您由于 404、403 等原因进行重定向。

对于登录用例,当客户端提供他们的信息时,会触发一个包含表单数据的 ajax 发布事件。使用 PHP 处理数据并将响应发送回 Javascript。根据 PHP 的返回消息,使用 window.location API 根据需要重定向/刷新。

【讨论】:

  • 为什么这比Location 标头更好?
  • 因为如果 OP 决定在以后采用该路线,标头将不适用于 AJAX 调用。发出异步请求时更改响应标头无法重定向/刷新客户端。为了将来的兼容性,最好处理来自客户端本身的客户端重定向,让 PHP 担心处理数据和身份验证。
  • 为什么投反对票? OP 请求使用 PHP 或 JS 进行重定向/刷新的解决方案。
  • 如果您要从“常规”请求更改为 AJAX 请求,您将不得不更改的不仅仅是标头。这两个保证完全不同的反应。听起来是个很奇怪的理由。您出于多种原因使用其中一种;使用 AJAX 不是其中之一。
  • 我并不是说通过更改标头就可以发出 AJAX 请求。我的观点是,如果您要解决问题,请以将来为您提供最多选择的方式解决它。如果您将解决方案构建为依赖服务器端代码来处理基于标头的重定向,那么您将自己画到了一个角落。由于 OP 提到希望在 PHP 或 JS 中找到解决方案,因此该解决方案将在以后以最少的代码重构为他们提供最多的选择。
猜你喜欢
  • 2019-09-25
  • 1970-01-01
  • 2017-04-03
  • 1970-01-01
  • 2015-08-14
  • 2017-06-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多