2010-09-05 10 views
8

Ich habe eine Webseite, die eine Anmeldung erfordert. Sobald sich ein Benutzer eingeloggt hat, starte ich die Sitzung und sobald er sich abmeldet, zerstöre ich ihn, aber wenn ich auf die Rückseite drücke, erscheint wieder die Benutzerprofilseite, die idealerweise nicht sein sollte, da sich der Benutzer abgemeldet hat. Es funktioniert jedoch einwandfrei, wenn ich die Seite nach dem Abmelden neu lade.Laden Sie die Seite erneut, wenn Sie auf "Zurück" klicken

Es ist ein lokaler Chatroom, wo alle online und eingeloggt miteinander chatten können. Es gibt drei Seiten: login.php, auth.php, logout.php

login.php ist die gemeinsame Anmeldeseite, die ein Formular enthält. auth.php hat eine div Anzeige aller bisherigen Chats bis jetzt, eine Textbox und share button beim Klicken auf welches ein Formular erneut an auth.php gesendet wird, so dass jedes Mal, wenn das Formular gepostet wird, der Chatpost an die Datenbank geschickt wird und auth mit der neuesten Datenbank neu geladen wird die chat div ..

Nun ist das Problem, sobald ich mich abmelden ich alle Variablen aufheben und die Sitzung zu zerstören, aber selbst dann, wenn ich die Zurück-Taste im Browser (Safari), die vorherige Version von auth.php ohne den letzten Chat-Eintrag ist sichtbar welches idealerweise nicht als die Sitzung zerstört werden soll. Ich habe eine Sitzung Validierung in auth.php setzen, so dass im Grunde möchte ich die auth.php der Benutzer besucht erneut zu laden, nachdem es auth.php Displays als Nachladen abzumelden, dass

„Sie sind nicht angemeldet“ Ich habe versucht haben

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

Sorry für die lange Frage, aber ich brauche wirklich Hilfe zu diesem Thema.

+0

Tipp: Verwenden Sie richtige Grammatik, um Ihr Problem zu erklären, anstatt 1 langen Satz; Es ist besser die Chancen, dass jemand _wollt_ tatsächlich lesen wird. – Alec

+1

@Alec, Sein Grammor ist korrekt, außer einem Tippfehler "Ich möchte, dass die auth.php neu lädt" der Benutzer besucht sie nach dem Abmelden. "@ Tushar breche deine Frage in Absätze, um die Lesbarkeit zu verbessern –

+0

das ist sehr merkwürdig Verwenden Sie PHP 'session_start()' -Funktion, um die Sitzung in der Anmeldeseite zu generieren? Wenn ja, sollte es schon darauf achten, den richtigen Header zu senden, um zu verhindern, dass der Browser die Seite zwischenspeichert (siehe meine Antwort). Auf welchem ​​Browser hast du das getestet? –

Antwort

6

Diese Header werden den Browser zwingen, und Proxies wenn überhaupt, nicht auf der Seite cachen und eine neue Anfrage an den Server für die Seite erzwingen:

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

tut dies auch zerstört alle Sitzungsvariablen – tushar

+0

, weil, wenn ich die Sitzung starte ich $ _session ['gelogged'] = 1 – tushar

+2

jetzt, wenn ich den obigen Code nach dem Neuladen der Seite seinen Wert ist 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 

Dies funktioniert für mich auf FF3. 6, IE7, IE8, Chrome5 (wenn Browser vor/zurück Taste die Seite trifft, wird immer RELOADED)

Eine andere Lösung genau durch session_start() Funktion, sehr ähnlich wie die, die oben geschickt, um die gleichen Header senden ist, aber noch reicher:

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"); 

HINWEIS: auch die hier gezeigte Reihenfolge ist das gleiche wie die Reihenfolge gesendet von session_start() (Sie dies mit HttpFox Addon für FF testen)

0

Ohne die Veränderung URL, legen Sie dies in den Kopf-Tag.
Das Skript verwendet zwei Cookies:
- ein zu speichern, wenn die Seite
wurde besucht - ein speichern, wenn die reaload ausgelöst wurde

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

Für eine reine Javascript-Lösung nur fügen Sie diese zu Ihrer HTML :

Der Code weist der ausgeblendeten Eingabe einfach einen Wert zu, der nach dem Klicken auf die Zurück-Schaltfläche erhalten bleibt. Dies wird dann verwendet, um zu bestimmen, ob die Seite veraltet ist, in welchem ​​Fall sie erneut geladen wird.

+0

das funktioniert in wechat – xiongjiabin

0

Ich verwende eine gemischte Lösung, da ich keine Cross-Browser-Methode gefunden habe, um die Seite neu zu laden, nachdem ich den Zurück-Knopf gedrückt habe.

Zum einen habe ich einige Meta-Tags, um alle meine Seiten hinzufügen:

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

Zweitens habe ich den folgenden Javascript auf dem Tag in allen meinen Seiten:

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

Ich beantrage Dieses Update in einer meiner Websites und es funktioniert gut in IE 10, Safari und Chrome.

0

Ich habe viele Lösungen ausprobiert, aber was für mich funktionierte, ist diese einfache Codezeile.

<body onunload=""> 

Hinzufügen entladen Ereignis mit Body-Tag und überprüfen Sie Ihr Problem.

Verwandte Themen