2013-06-27 159 views
0

我在这里有一个严重的问题。我用会话创建了一个用户系统。 问题是只有当您登录时才会看到内容。例如,在导航栏中,登录按钮被替换为一个账户按钮。PHP包含页面内容不刷新

现在我的问题: 每页php-includes navbar.php。 例如在index.php文件写的是:

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

的login.php中重定向到的index.php:

header("Location: index.php"); 

但是,index.php文件不会刷新。用“F5”进行硬刷新后,每件事情都很好。

我也试过meta标签,以防止在缓存中加载页面。

任何想法?

的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> 

的login.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; 
?> 
+0

什么是您的PHP文件的缓存限制?谈论.htaccess –

+0

因为它是一个动态文件,一般的做法是强制不缓存 –

+0

你在哪里包括login.php文件?在调用'header'之前你是否回声?在设置标题之前,文件中是否有HTML?如果是这样的话:将'header'移动到顶端,或使用'ob_start()' –

回答

0

根据the specs,你必须通过一个绝对的uri。
这也是最好的补充这一点,重定向时:

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

对于SEO的效果影响不大,而浏览器缓存(google一下,以了解更多)。
我希望你已经知道这一点,但你也必须确保没有输出已经发送到客户端,因为在那种情况下,头已经被发送,并且逻辑指示改变它们为时已晚,然后。

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

+0

将login.php更改为: header(“Location:http://www.***.com/index.php”); 仍未刷新索引。PHP,按F5后,每件事情都很好,登录按钮被替换为帐户 – Swagger

+0

@Swagger:结果是...?另外:你发布的代码片段让我感觉你已经发送了头文件(隐式地通过发送输出)。我已经添加了一个链接到一个较老的问题,它解释了如何缓冲输出或如何确保如果需要必须设置标题 –

1

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

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