0

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

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

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

login.php 重定向到 index.php:

header("Location: index.php");

但 index.php 不会刷新。用“F5”硬刷新后,一切都很好。

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

有任何想法吗?

索引.php:

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

导航栏.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>

登录.php:

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

2 回答 2

2

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

 <FilesMatch ".(pl|php|cgi|spl|scgi|fcgi)$">
 Header unset Cache-Control
 </FilesMatch>
于 2013-06-27T14:17:11.847 回答
0

根据规范,您必须传递绝对 uri。
重定向时最好添加以下内容:

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

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

检查此问题以获取有关如何处理标头和输出缓冲的更多详细信息。

于 2013-06-27T14:14:11.787 回答