2013-06-27 154 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>