2010-07-28 7 views
0

J'utilise un script de connexion PHP qui défie l'utilisateur pour le nom d'utilisateur & mot de passe.empêcher l'utilisateur de se reconnecter après s'être déconnecté en appuyant sur le bouton précédent

Une fois le programme authentifié stocke une valeur de session. Lors de la déconnexion, la valeur de la session est définie sur des espaces.

Une fois déconnecté Je veux éviter de laisser l'utilisateur appuyant sur le bouton de retour plusieurs fois et et les paris autorisés à voir l'écran des données ou se connecter accidentaly avant.

J'utilise des sessions, une nouvelle direct à Envoyer un utilisateur validé à une nouvelle page. J'utilise aussi ob_start, ob_flush et ob_end_clean pour éviter les erreurs ou rediriger.

Questions: Est-ce vraiment sécurisé? Est-ce une approche courante?
Y a-t-il une alternative à la mise en mémoire tampon?

ci-dessous est une petite preuve de concept.

<?php 
header("Cache-Control: no-cache, must-revalidate"); 
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); 
header("Pragma: public"); 
session_cache_limiter('nocache'); 
// I'm not sure how effective any of the above seem to be. 

session_start(); 

// start buffering because if we use header later we want to avoid error 
ob_start(); 

echo "Type <b>in</b> or <b>out</b> to login/logout<br>"; 
?> 

<form action='' method='POST'> 
<input type='text' name='status' size='10' value=""><br/><br/> 

<p>&nbsp;</p> 
<input type='submit' name='Login' value='Login' /></form></p> 

<?php 
if ($_POST['status'] == 'in') 
{ 
    $_SESSION['logged_in'] = 'in'; 
    ob_end_clean(); // clean and erase buffer so far 
     header('location:test2.php');   
     exit; 
} 

if ($_POST['status'] == 'out') 
{ 
    $_SESSION['logged_in'] = 'no'; 
    echo "you are logged out <br>"; 

} 
ob_flush(); // push output 
echo "login status = " . $_SESSION['logged_in'] ; 

?> 



file test2.php 
<?php 
echo "You have logged in"; 
?> 

Répondre

0

Qu'est-ce que vous avez besoin est une méthode appropriée plutôt que la déconnexion de tester les données de session. Vous voulez que la session soit effacée de manière compétitive. Voici un exemple dans lequel l'utilisateur se connecte, déconnecte l'utilisateur et vérifie également si l'utilisateur est connecté. Lorsque vous cliquez sur la page de déconnexion, vous êtes automatiquement déconnecté et redirigé. Un clic de retour ne changera rien, vous ne serez pas toujours être connecté.

login.php

session_start(); 
$valid = someLoginFunctionHere(); 
if($valid) { 
    $_SESSION['isLoggedIn'] = true; 
    header("Location: homepage.php"); 
} 

homepage.php

session_start(); 
// If they are not logged in, send them to login page 
if(!isset($_SESSION['isLoggedIn'])) { 
    header("Location: login.php"); 
} 

// Normal homepage stuff 
... 

logout.php

session_start(); 
session_destroy(); 
header("Location: login.php"); 

J'espère que cela aidera à démystifier un peu les sessions pour vous.

1

Je voudrais commencer par détruire la session avec session_destroy() plutôt que de définir la valeur de « logged_in » à « non ».

Ensuite, il suffit de vérifier pour voir si la session existe pour voir si l'utilisateur est connecté.

+0

ça semble beaucoup plus facile ... –

Questions connexes