2012-04-12 31 views
10

Tôi có trang web A. Người dùng nhấp vào biểu mẫu để gửi dữ liệu và đưa anh ấy đến trang web B. Khi anh ấy nhấp vào nút quay lại, tôi cần trang web A được làm mới từ máy chủ, thay vì được tải từ bộ nhớ cache. Tôi có điều này: <meta http-equiv="expires" content="0"> nhưng nó dường như không hoạt động. Tôi cũng đã cố gắng thiết lập một biến trên trang B (biến phiên thông qua php) và sau đó kiểm tra nó trên trang A và làm mới (hoặc không) theo sự tồn tại của nó. Doest này dường như làm việc hoặc. Các mã cơ bản cho điều đó là: Trang A:Trang bắt buộc phải tải lại từ máy chủ thay vì tải phiên bản đã lưu trong bộ nhớ

<?php 
if(isset($_SESSION['reloadPage'])) { 
unset($_SESSION['reloadPage']); 
echo' 
<script> 
window.location.replace("/****/****/*****.php"); 
</script> 
'; 
} 
?> 

Và trên trang B:

$_SESSION['reloadPage'] = 1; 

Với giải pháp PHP, nó chỉ đơn giản là tiếp tục cố gắng để làm mới trang trong một vòng lặp không bao giờ kết thúc. Một cái gì đó trong logic của tôi mất tích? Đây có phải là cách đi đúng đắn không?

EDIT Sau khi điều tra thêm, khi bạn nói với các trình duyệt để không cache trang, điều đó có buộc một đầy đủ phía máy chủ làm mới không? Đó là những gì tôi cần. Làm mới toàn bộ phía máy chủ của trang.

+0

Đây có phải là phiên bản trực tuyến mà chúng tôi có thể xem không? –

Trả lời

5

OK thử này để thay thế:

<?php 
    if(!session_id()) { 
     @session_start(); 
    } 
    header('Expires: Sat, 26 Jul 1997 05:00:00 GMT'); 
    header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT'); 
    header('Cache-Control: no-store, no-cache, must-revalidate'); 
    header('Cache-Control: post-check=0, pre-check=0', false); 
    header('Pragma: no-cache'); 

    if(isset($_SESSION['form_submitted'])) { 
     unset($_SESSION['form_submitted']); 
     header('Location: ?' . uniqid()); 
     #header('Refresh: 0'); 
    } 
?> 

Bạn sẽ cần phải đặt $ _SESSION [ 'form_submitted'] = true trên trang 2.

+0

Không hoạt động như mong đợi. Nhưng khi suy nghĩ về nó hơn nữa, nó có vẻ như mặc dù nó không bộ nhớ đệm trang ... NHƯNG, nó không phải là làm mới phía máy chủ từ những gì tôi có thể nói. – mdance

+0

Không hoạt động. Im loại mất mát. – mdance

+0

Đây có phải là phiên bản trực tuyến mà chúng tôi có thể xem không? –

0

JavaScript của bạn nên được ...

window.location = "/****/****/*****.php" 

Tôi nghĩ rằng nên sửa vòng lặp của bạn.

+0

Tôi không nghĩ rằng anh ấy đang cố gắng đưa mọi người đến với google. – AndrewR

+0

Kết quả tương tự. Tôi tin rằng vấn đề là với logic PHP của tôi ... – mdance

2

Hãy thử với cả ba:

<meta http-equiv="cache-control" content="no-cache"> <!-- tells browser not to cache --> 
<meta http-equiv="expires" content="0"> <!-- says that the cache expires 'now' --> 
<meta http-equiv="pragma" content="no-cache"> <!-- says not to use cached stuff, if there is any --> 
0
<?php 
    session_start(); 
    if(isset($_SESSION['reloadPage'])) { 
    unset($_SESSION['reloadPage']); 
    echo' 
    <script> 
    window.location.replace("/****/****/*****.php"); 
    </script> 
    '; 
} 
?> 
+0

Phiên bắt đầu đã ở đầu trang. – mdance

1
<?php 
    session_start(); 
    if(isset($_SESSION['reloadPage'])) { 
     unset($_SESSION['reloadPage']); 
      //no outputting code above header 
     header("Cache-Control: no-cache, must-revalidate"); 
     header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); 
     header("Location: http://www.mypage.com/"); 
    } 
?> 
+0

Nó nói quá nhiều chuyển hướng ... mặc dù tôi tin rằng đây là giải pháp tốt nhất cho đến nay. Có vẻ như nó không được đặt lại một cách chính xác biến reloadPage. – mdance

+0

Có thể tiêu đề đã được gửi, điều này sẽ xảy ra nếu có bất kỳ mã xuất nào trước tiêu đề, như bất kỳ HTML hoặc echo/print hoặc bất kỳ thứ gì khác được xuất ra tài liệu, tiêu đề phải là điều đầu tiên đã được gửi. Điều này thường gây ra lỗi "tiêu đề đã gửi", vì vậy nó cũng có thể là biến phiên không được đặt và nó sẽ tiếp tục trong vòng lặp, thử tìm kiếm một chút hoặc kiểm tra biến cho một giá trị nhất định và đặt nó để null thay vì unsetting nó vv – adeneo

1

Tôi biết đây là câu hỏi cũ và đã có câu trả lời er (mà không làm mới từ máy chủ). Vì vậy, tôi muốn chia sẻ một giải pháp bằng cách sử dụng jQuery.

$('#back-button').click(function(){ 
    setTimeout(location.reload(true), 1000); 
}); 

Giải thích:
Như bạn nhấp vào nút quay lại, các setTimeout sẽ kích hoạt sau 1 giây (1000 mili giây). Sau đó, trang sẽ tải lại từ máy chủ khi thông số bên trong reloadtrue.

Nếu bạn đặt true bên trong reload, nó sẽ tải lại từ máy chủ trong khi nếu bạn đặt false, nó sẽ tải lại từ bộ nhớ cache. Nguồn w3schools.

Các vấn đề liên quan