【问题标题】:PHP Include page content does not refreshPHP包含页面内容不刷新
【发布时间】:2013-06-25 02:12:00
【问题描述】:

我这里有一个严重的问题。我创建了一个带有会话的用户系统。 问题是您只有在登录时才能看到内容。例如,在导航栏中,登录按钮被替换为帐户按钮。

现在我的问题: 每个 php 页面都包含 navbar.php。 比如在index.php中是这样写的:

<body>
<?php include("navbar.php")?>
</body>

login.php 重定向到 index.php:

header("Location: index.php");

但是 index.php 没有刷新。用“F5”硬刷新后一切正常。

我还尝试了元标记来防止将页面加载到缓存中。

有什么想法吗?

index.php:

<html lang="en">
<head>
    ...
</head>
<body >
<?php include("navbar.php")?>
    <div id="wrap">
    ...
    </div>
</body> 
</html>

navbar.php

<div class="navbar">
    <?php
    session_start();
    if (!isset($_SESSION['logged']) || !$_SESSION['logged']) 
    {?>
      ...Sign in etc...
    <?php
    }
    else
    {?>
        ...Accounting...
    <?php
    }?>
</div>

登录.php:

<html>
<head>
</head>
<body>
<?php include("navbar.php"); ?>
<div class="container">
  <form class="form-signin" action="logon.php" method="post" >
        ...
    <button type="submit">Login</button>
  </form>
</div>
</body>
</html>

logon.php:

<?php
if login successfull //pseudo code
    header("Location: http://www.***.com/index.php");
}
else 
{
    header("Location: http://www.google.de");
}
exit;
?>

【问题讨论】:

  • 你的 php 文件的缓存限制是多少?谈论.htaccess
  • 由于是动态文件,一般做法是不强制缓存
  • 你在哪里包含 login.php 文件?在致电header 之前,您echo-ing 有什么事情吗?在设置标题之前文件中是否有 HTML?如果是这样:将header 移到顶部,或使用ob_start()
  • 缓存限制设置为 nocache...
  • @Swagger:您的所有文件都以&lt;html&gt; 标记开头,因此标题会在您调用header 之前发送。通过输出缓冲解决该问题,或确保在生成任何输出之前设置标头。

标签: php html http-headers location refresh


【解决方案1】:

将此添加到您的 .htaccess 文件中。这将禁用这些文件扩展名上的浏览器缓存

 <FilesMatch ".(pl|php|cgi|spl|scgi|fcgi)$">
 Header unset Cache-Control
 </FilesMatch>

【讨论】:

    【解决方案2】:

    根据the specs,你必须传递一个绝对uri。
    重定向时最好也加上这个:

    header('HTTP/1.1 301 Moved Permanently');
    header('Location: https://www.google.com');
    

    用于 SEO 目的和浏览器缓存(谷歌此以了解更多信息)。
    我希望您已经知道这一点,但您还必须确保没有向客户端发送任何输出,因为在这种情况下,标头已经发送,并且逻辑表明现在更改它们为时已晚。

    Check this question 了解有关如何处理标头和输出缓冲的更多详细信息。

    【讨论】:

    • 将 login.php 更改为:header("Location: www.***.com/index.php");仍然没有刷新 index.php,按 F5 后一切正常,登录按钮被替换为帐户
    • @Swagger: 结果是……?另外:您发布的 sn-p 我得到的印象是您已经发送了标头(通过发送输出隐式发送)。我添加了一个旧问题的链接,该问题解释了如何缓冲输出或如何确保在需要时可以设置标题
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-02-06
    • 1970-01-01
    • 2015-10-23
    • 1970-01-01
    • 2020-07-28
    • 2022-01-25
    • 1970-01-01
    相关资源
    最近更新 更多