PHP包含页面内容不刷新

Posted

技术标签:

【中文标题】PHP包含页面内容不刷新【英文标题】:PHP Include page content does not refresh 【发布时间】: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 之前发送。通过输出缓冲解决该问题,或确保在生成任何输出之前设置标头。 【参考方案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 我得到的印象是您已经发送了标头(通过发送输出隐式发送)。我添加了一个旧问题的链接,该问题解释了如何缓冲输出或如何确保在需要时可以设置标题

以上是关于PHP包含页面内容不刷新的主要内容,如果未能解决你的问题,请参考以下文章

php 如何在页面刷新时不重复操作数据库?

从包含的 .php 文件中自动刷新表

如何在不刷新整个页面的情况下更新 HTML 文档中的 php 变量?

怎样使php在执行的时候弹出对话框,并且使当前页面不刷新。

在用php做小页面,有个表单.每次刷新页面时老是提示不要重复提交表单?怎样去掉这个提示啊

每次刷新页面时,PHP 电子邮件表单都会发送电子邮件