2010-07-21 5 views
0

J'ai le script de connexion suivant ..rediriger les utilisateurs vers la page de connexion

<?php 
$name = $_POST["name"]; 
$password = $_POST["password"]; 
$query = "SELECT * FROM users WHERE username = '$name' 
     AND password = '$password'"; 
$q=mysql_query($query) or die(mysql_error()); 
$result = mysql_query($query); 
if (mysql_fetch_row($result)) { 
    /* access granted */ 
    session_start(); 
    header("Cache-control: private"); 
    $_SESSION["access"] = "granted"; 
    header("Location: ./menu.php"); 
    } else 
    /* access denied &#8211; redirect back to login */ 
    header("Location: ./login.html"); 
    ?> 
    mysql_close(); 
    ?> 

Mais Qu'aurais-je besoin maintenant « menu » pour rediriger les utilisateurs qui ne sont pas connectés à la page de connexion? pour empêcher l'accès direct?

Merci.

+1

Juste pour info, vous avez deux étiquettes "?>" Fermantes. – eykanal

+3

N'oubliez pas d'échapper $ name et $ password; et vous devriez vraiment saler et hacher votre mot de passe –

Répondre

4

dans menu.php?

session_start(); 
if (!isset($_SESSION['access']) || $_SESSION['access'] != "granted") { 
    header("Location: ./login.html"); 
    exit(); 
} 
+2

N'oubliez pas un session_start() en haut –

+0

Vous oubliez de fermer isset(). –

+0

@Lex, fixé merci. – Fosco

1

Vérifiez la valeur de $_SESSION["access"] sur le dessus de votre menu.php. En outre, vous manquez un appel au session_start. Il ne sera peut-être pas nécessaire si vous avez activé session.auto_start, mais c'est une bonne habitude de l'appeler explicitement.

2

Vous devez mettre quelque chose comme ça en haut de menu.php:

<?php 
    session_start(); 
    if(!isset($_SESSION['access']) || $_SESSION['access'] != 'granted'){ 
     header("Location: ./login.html'); 
    } 
?> 

Et ne pas oublier de désinfecter votre entrée de requête:

$name = mysql_real_escape_string(stripslashes($_POST["name"]));  
$password = mysql_real_escape_string(stripslashes($_POST["password"]));  

Et ne pas oublier de appelez session_start(); au début de chaque script qui utilise $_SESSION

+0

'stripslashes' n'est nécessaire que s'il a activé magic_quotes_gpc – Maerlyn

+0

+1 pour le code d'exemple plus complet. – Fosco

0

Vérifiez $_SESSION["access"] dans le menu pour voir si l'utilisateur est connecté. En passant, vous devriez lire sur l'injection SQL et réécrire cette requête SQL en utilisant l'échappement.

Questions connexes