2010-06-09 13 views
2

J'ai une page logout.php qui se termine la session d'un utilisateur et fonctionne bien et effectue les opérations suivantes:bouton Safari Retour ne pas honorer la session de fermeture de session PHP

session_start(); session_unset(); session_destroy();

Je viens de remarquer lors d'un test avec Safari que lorsque vous vous déconnectez, vous pouvez cliquer sur le bouton Précédent pour revenir à la page précédente qui nécessite une authentification mais ne sont pas invités. Vous ne pouvez pas quitter cette page sans entrer dans la navigation, mais il ne devrait pas afficher la page précédente en premier lieu.

Jusqu'à présent, dans mes tests ce n'est un problème avec Safari sous Mac OS X et il y a un certain nombre d'autres rapports à ce sujet mais sans résolution que je pouvais trouver:

http://www.experts-exchange.com/Web_Development/Web_Languages-Standards/PHP/Q_23702691.html

Je voudrais Aimer être capable de désactiver ce comportement avec le bouton de retour de Safari - surpris que cela se passe en premier lieu.

Merci, Steve

+3

hmm Je ne pense pas que ce soit le problème avec votre application, safari affiche simplement les données en cache – phunehehe

+0

Sur tous les autres navigateurs si je me déconnecte et cliquez sur le bouton Retour, j'obtiens la page de connexion pour entrer le nom d'utilisateur/mot de passe. Sur Safari, je me déconnecte et je clique sur le bouton Retour, il "se souvient" de la page précédente (sons liés au cache) et ne s'authentifie pas même si la session est détruite et devrait m'inciter à m'authentifier. Si je navigue depuis cette page uniquement, cela m'incite-t-il à m'authentifier. –

+0

Parce que le navigateur met en cache la page .. – KDOT

Répondre

2

Assurez-vous que toutes les pages que vous servez qui requiert une authentification est envoyée avec les en-têtes de contrôle de cache approprié. La page est affichée à partir du cache du navigateur, en fournissant un contrôle de cache qui interdit explicitement la mise en cache, vous devriez être en mesure d'arrêter cela.

De http://php.net/manual/en/function.header.php

<?php 
header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1 
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); // Date in the past 
?> 

Plus précisément pour Safari, il y a une discussion sur les caches et déchargent des événements, que vous pourriez être en mesure d'utiliser pour éviter la mise en cache. Il semble que WebKit a quelques complications avec la mise en cache en général.

http://webkit.org/blog/427/webkit-page-cache-i-the-basics/

http://webkit.org/blog/516/webkit-page-cache-ii-the-unload-event/

+0

Salut merci pour votre commentaire. J'ai déjà essayé cela en vain. Je viens de les ajouter à nouveau et il charge toujours la page qui nécessite une authentification. Le problème semble être avec les navigateurs basés sur Webkit tels que Safari pour Mac et l'iPhone. –

+1

J'ai ajouté quelques liens. Lorsque vous effectuez la procédure "connexion, déconnexion, retour", essayez d'utiliser les outils de développement Safari/Chrome pour inspecter les en-têtes HTTP détectés par le navigateur (Outils de développement -> Ressources, cliquez sur l'entrée de page à gauche). – ptomli

+0

Merci beaucoup, je vais regarder dans ce - une autre recherche m'a conduit à la même conclusion sur l'événement onUnload etc. Merci –