2011-04-28 2 views
2

J'essaie de tester un système de connexion simple sans DB, juste à des fins de test. J'ai créé un fichier php qui vérifie si le nom d'utilisateur et le pass sont valides et enregistrent une session.PHP Sessions Système de connexion

<?php 
session_start(); 
define("ADMINUSER", "user"); 
define("ADMINPASSWORD", "pass"); 
$user = $_POST['user']; 
$pass = $_POST['pass']; 
if (($user==ADMINUSER) && ($pass==ADMINPASSWORD)) 
{ 
    $_SESSION['logged_in'] = true; 
    header("Location: main.php"); 
} 
else 
{ 
    header("Location: auth.php?flag=wrong"); 
} 
?> 

et inclure dans d'autres fichiers pour vérifier si l'utilisateur est connecté:

<? session_start(); 
if ($_SESSION['logged_in'] != true) 
{ 
    header("Location: auth.php?flag=not"); 
    exit; 
} 
?> 

Mais cela ne semble pas fonctionner, que je ferme la fenêtre et essayer de l'ouvrir à nouveau et il ne me redirige pas vers la page de connexion (auth.php).

Qu'est-ce que je fais mal? Toute aide est appréciée.

+0

Vous devez quitter complètement votre navigateur et/ou effacer les cookies, et pas seulement fermer une fenêtre. –

+0

Au moins, vous n'avez pas utilisé 'session_start()' dans votre autre fichier avant d'accéder à $ _SESSION. – initall

+0

La première redirection d'en-tête fonctionne-t-elle? –

Répondre

0

Il ne vous redirigera pas vers la page auth.php car votre session persiste jusqu'à ce que vous effaciez les cookies de votre navigateur ou jusqu'à épuisement de la session. Dès lors, pourquoi fermer la fenêtre du navigateur ne vous déconnecter Facebook/Twitter, etc.

+0

Quelle est la bonne façon de vérifier si l'utilisateur se connecte et ne pas accéder à la page sans les informations d'identification appropriées? La plupart des clients ont besoin d'URI absolus pour l'emplacement, par exemple header ("Emplacement: http://www.example.com/main.php") ? – ProgrammingEnthusiast

+0

J'ai effacé mes cookies et éteint mon ordinateur et la page ne redirige toujours pas vers le formulaire de connexion. Es-tu sûr qu'il n'y a rien de mal dans le script? – ProgrammingEnthusiast

6

Cette partie de votre code:


    $_SESSION['logged_in'] == true; 

Devrait être:


    $_SESSION['logged_in'] = true; 

= est un opérateur d'affectation.

== est un opérateur de comparaison.

0

Vous devez toujours utiliser une sortie après une redirection avec la fonction d'en-tête, sinon le chargement de la page continuera.

header('Location: auth.php', true, 303); 
exit; 

Il est une bonne pratique de préciser le code 303, au lieu de rediriger la valeur par défaut 301. code 301 signifie « déplacé de façon permanente », le code 303 signifie « voir autre ».