2010-09-05 77 views
8

Tôi có một trang web yêu cầu đăng nhập. Khi người dùng đã đăng nhập, tôi bắt đầu phiên làm việc và khi anh ấy đăng xuất, tôi sẽ hủy nó, nhưng khi tôi nhấn trang sau nó sẽ cho tôi trang hồ sơ người dùng một lần nữa lý tưởng không phải là trường hợp người dùng đăng xuất. Tuy nhiên, nó hoạt động tốt nếu tôi tải lại trang sau khi đăng xuất.Tải lại trang trên nút quay lại

Đó là phòng trò chuyện địa phương nơi mọi người trực tuyến và đăng nhập có thể trò chuyện cùng nhau. Có ba trang: login.php, auth.php, logout.php

login.php là trang đăng nhập chung kèm theo biểu mẫu. auth.phpdiv hiển thị tất cả các cuộc trò chuyện trước đó cho đến bây giờ, một hộp văn bản và nút chia sẻ khi nhấp vào biểu mẫu đó được gửi lại đến auth.php để mỗi khi biểu mẫu được đăng lên chatpost được gửi đến cơ sở dữ liệu và auth được tải lại với cơ sở dữ liệu mới nhất bên trong các trò chuyện div ..

Bây giờ vấn đề là một khi tôi đăng xuất tôi bỏ đặt tất cả các biến và hủy phiên nhưng thậm chí sau đó nếu tôi nhấn nút quay lại trong trình duyệt (Safari), phiên bản trước của auth.php mà không có mục nhập trò chuyện cuối cùng được hiển thị lý tưởng không nên khi phiên bị hủy. Tôi đã đặt một xác nhận phiên auth.php, vì vậy về cơ bản tôi muốn auth.php để tải lại của người dùng truy cập nó sau khi đăng xuất như tải lại auth.php hiển thị rằng: "Bạn chưa đăng nhập"

tôi đã cố gắng

<?php header("Cache-Control: no-cache"); 
header("Pragma: no-cache"); 
?> 
and 
<head> 
<meta http-equiv='Pragma' content='no-cache'> 
<meta http-equiv='Expires' content='-1'> 
</head> 

Xin lỗi vì câu hỏi dài nhưng tôi thực sự cần giúp đỡ về điều này.

+0

Mẹo: sử dụng đúng ngữ pháp để giải thích vấn đề của bạn, thay vì 1 câu dài; nó sẽ tốt hơn cơ hội mà ai đó sẽ thực sự _want_ để đọc này. – Alec

+1

@Alec, ngữ pháp của anh ta là chính xác ngoại trừ lỗi chính tả "tôi muốn auth.php tải lại' của' người dùng truy cập nó sau khi đăng xuất ". @ Tushar ngắt câu hỏi của bạn thành các đoạn để cải thiện khả năng đọc –

+0

. sử dụng hàm PHP 'session_start()' để tạo phiên trong trang đăng nhập? Nếu có, bạn nên cẩn thận để gửi tiêu đề chính xác để ngăn trình duyệt khỏi trang đệm (xem câu trả lời của tôi). Bạn đã thử nghiệm trình duyệt này trên trình duyệt nào? –

Trả lời

6

Những tiêu đề sẽ buộc các trình duyệt, và proxy nếu có, không để cache trang và buộc một yêu cầu mới đến máy chủ cho trang đó:

header("Cache-Control: private, must-revalidate, max-age=0"); 
    header("Pragma: no-cache"); 
    header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); // A date in the past 
+0

thực hiện việc này cũng phá hủy tất cả các biến phiên – tushar

+0

vì khi tôi bắt đầu phiên, tôi thực hiện $ _session ['logged'] = 1 – tushar

+2

ngay bây giờ khi tôi nhập mã ở trên sau khi tải lại trang giá trị của nó là null – tushar

8
header("Expires: Thu, 19 Nov 1981 08:52:00 GMT"); //Date in the past 
header("Cache-Control: no-store, no-cache, must-revalidate"); //HTTP/1.1 

này làm việc cho tôi trên FF3. 6, IE7, IE8, Chrome5 (khi chạm/nút ra trở lại của trình duyệt trang luôn RELOADED)

Một giải pháp khác là gửi chính xác các tiêu đề cùng gửi bởi session_start() chức năng, rất giống với những người trên, nhưng ngay cả người giàu hơn:

header("Expires: Thu, 19 Nov 1981 08:52:00 GMT"); //Date in the past 
header("Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0"); //HTTP/1.1 
header("Pragma: no-cache"); 

LƯU Ý: cũng trật tự đưa ra ở đây là giống như thứ tự gửi bởi session_start() (bạn có thể kiểm tra điều này với HttpFox addon cho FF)

0

Nếu không có thay đổi url, đặt giá trị này vào thẻ đầu.
Các kịch bản sử dụng hai cookie:
- một để lưu trữ nếu trang đã được truy cập
- một để lưu trữ nếu reaload đã được kích hoạt

if(navigator.cookieEnabled){  
    var visited=0; 
    var refreshing=0; 
    if(Get_Cookie('visited')) { 
     visited=parseInt(Get_Cookie('visited')); 
    } 
    if (Get_Cookie('refreshing')) { 
     refreshing=parseInt(Get_Cookie('refreshing')); 
    } 
    if(visited==1){ 
     if(refreshing==0){ 
      window.document.cookie = 'refreshing=1'; 
      window.location.reload(); 
     }else{ 
      window.document.cookie = 'refreshing=0'; 
     } 
    }else{ 
     window.document.cookie = 'visited=1'; 
    } 
} 
4

Đối với một giải pháp javascript thuần túy chỉ thêm video này vào HTML của bạn :

<input id="alwaysFetch" type="hidden" /> 
<script> 
    setTimeout(function() { 
     var el = document.getElementById('alwaysFetch'); 
     el.value = el.value ? location.reload() : true; 
    }, 0); 
</script> 

Mã chỉ định giá trị cho đầu vào bị ẩn sẽ vẫn còn sau khi nút quay lại được nhấp. Điều này sau đó được sử dụng để xác định nếu trang là cũ trong trường hợp nó được tải lại.

+0

hoạt động trong wechat – xiongjiabin

0

Tôi đang sử dụng giải pháp hỗn hợp, vì tôi không tìm thấy phương thức trình duyệt chéo để tải lại trang sau khi nhấn nút quay lại.

Đầu tiên, tôi thêm một số thẻ meta để tất cả các trang của tôi:

<meta http-equiv="Pragma" content="no-cache"> 
<meta http-equiv="no-cache"> 
<meta http-equiv="Expires" content="-1"> 
<meta http-equiv="Cache-Control" content="no-cache"> 

Thứ hai, tôi thêm javascript sau trên thẻ trong tất cả các trang của tôi:

<script type="text/javascript">  
// If persisted then it is in the page cache, force a reload of the page. 
     window.onpageshow =function(event){ 
      if(event.persisted){   
       document.body.style.display ="none";   
       location.reload(); 
      } 
     }; 
</script> 

Tôi đang áp dụng điều này khắc phục trong một trong các trang web của tôi và nó hoạt động tốt trong IE 10, Safari và Chrome.

0

Tôi đã thử nhiều giải pháp nhưng những gì làm việc cho tôi là dòng mã đơn giản này.

<body onunload=""> 

Thêm sự kiện dỡ hàng bằng thẻ body và kiểm tra sự cố của bạn.

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