2012-04-12 7 views
10

mam strony internetowej A. użytkownik kliknie formularza do przekazywania danych, a to zabiera go do strony internetowej B. Kiedy kliknie przycisk Wstecz, muszę ci stron internetowych A do być odświeżony z serwera, a raczej załadowany z pamięci podręcznej. Mam to: <meta http-equiv="expires" content="0">, ale nie wydaje się działać. Próbowałem także ustawić zmienną na stronie B (zmienna sesji za pomocą php), a następnie sprawdzić ją na stronie A i odświeżyć (lub nie) zgodnie z jej istnieniem. Wydaje się, że ten gest działa. Kod podstawowy na to: Strona A:strona Siła przeładować z serwera zamiast obciążenia wersja buforowane

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

A na stronie B:

$_SESSION['reloadPage'] = 1; 

Dzięki rozwiązaniu PHP, po prostu wciąż próbuje odświeżyć stronę w niekończącą się pętlę. Coś w mojej logice brakuje? Czy to właściwa droga do tego?

EDIT Po dalszych badaniach, gdy powiesz, że przeglądarka nie buforować stronę, która ma wymusić pełną stronie serwera odświeżyć, jak również? To jest to, czego potrzebuję. Pełne odświeżenie strony po stronie serwera.

+0

Czy to wersja online, którą możemy zobaczyć? –

Odpowiedz

5

OK spróbować zamiast:

<?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ędziesz musiał ustawić $ _SESSION [ 'form_submitted'] = true na stronie 2.

+0

Nie działa zgodnie z oczekiwaniami. Ale kiedy się nad tym zastanowić, wygląda na to, że nie buforuje strony ... ALE, to nie jest odświeżająca strona serwera z tego co mogę powiedzieć. – mdance

+0

Nie działa też. Jestem w pewnym sensie stratą. – mdance

+0

Czy są to wersje online, które możemy obejrzeć? –

0

JavaScript powinny być ...

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

myślę że powinien naprawić pętlę.

+0

Nie sądzę, że próbuje wysłać ludzi do google. – AndrewR

+0

Takie same wyniki. Wierzę, że problem jest z moją logiką PHP ... – mdance

2

Spróbuj z całej trójki:

<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

Sesja rozpoczyna się już u góry strony. – 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

Podano zbyt wiele przekierowań ... chociaż uważam, że jest to najlepsze rozwiązanie do tej pory. Wygląda na to, że nie jest to prawidłowe ustawienie zmiennej reloadPage. – mdance

+0

Może to oznaczać, że nagłówek jest już wysłany, stanie się tak, jeśli przed nagłówkiem znajdzie się kod wyjściowy, jak każdy HTML lub echo/druk, lub cokolwiek innego, co zostanie wyprowadzone do dokumentu, nagłówek powinien być pierwszą rzeczą, która jest wysłany. Zwykle daje to błąd "już wysłany nagłówek", więc może to być również zmienna sesji, która nie jest nieustawiona, i która utrzymuje się w pętli, spróbuj trochę roztrwonić lub sprawdź zmienną dla pewnej wartości i ustaw to null zamiast go wyłączać itp. – adeneo

1

Wiem, że to stare pytanie i już otrzymałem odpowiedź er (to nie odświeżanie z serwera). Chciałbym udostępnić rozwiązanie za pomocą jQuery.

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

Objaśnienie:
Po kliknięciu przycisku plecach, setTimeout będą wyzwalane po 1 sekundę (1000 milisekund). Następnie strona zostanie załadowana ponownie z serwera, ponieważ parametr wewnątrz reload jest true.

Jeśli umieścisz true w urządzeniu reload, zostanie ono ponownie załadowane z serwera, a jeśli wstawisz false, zostanie ono ponownie załadowane z pamięci podręcznej. Źródło w3schools.

Powiązane problemy