IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Effacer variable de session


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 124
    Par défaut Effacer variable de session
    Bonjour,
    j'ai toujours un problème d'effacement de mes variables de session. Enfin, je pense que ça vient de là.
    Voilà la manière que j'utilise pour effacer mes variables de session et la session :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $_POST = array ();
    $_SESSION = array ();
    session_unset ();
    session_destroy ();
    Et voici le script que j'utilise sur chaque page devant avoir un accès réduit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    <?php
    session_start();
     
    $filename = "sessions.php4";
    if (file_exists ($filename)) require_once ($filename);
    set_time_limit  (0);
     
    controleAcces ();
    ?>
    La fonction controlAcces vérifie à chaque fois le login et le mot de passe dans la base de données, si tout est bon on affiche la page sinon on affiche le formulaire d'identification.

    Mon soucis est que lorsque l'on quitte en cliquant sur le lien de déconnexion et que l'on fait plusieurs fois précédent, on arrive au bout de plusieurs fois à voir une page dont on ne devrait pas avoir l'accès et on peut voir ce que l'on veut. En fait on est reconnecter car le navigateur dit qu'il ne peut afficher la page sans renvoyer des informations ($_POST j'imagine) et quand on lui dit de le faire et bien on a accès aux pages.
    Si mes explications ne suffisent pas, je veux bien vous montrer les fonctinos que j'utilise.
    Merci par avance de votre aide moi je cale sec.

  2. #2
    Membre éprouvé Avatar de julien.63
    Profil pro
    balayeur
    Inscrit en
    Décembre 2005
    Messages
    1 348
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : balayeur

    Informations forums :
    Inscription : Décembre 2005
    Messages : 1 348
    Par défaut
    Salut,
    en fait, si je comprends bien, c'est pas vraiment un problème de session.
    C'est que l'utilisateur en faisant "précédent" un certain nombre de fois re-soumet le formulaire qui ouvre l'accès à la partie protégée...
    Hum c'est fourbe !!

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 124
    Par défaut
    C'est un problème.
    J'efface pourtant bien la variable $_SESSION et même celle $_POST (je m'étais dis que cela pouvait être la cause) mais ça marche toujours pas.
    J'ai essayé sous IE et FF mais c'est le même combat.

    Une idée ??????

  4. #4
    Membre émérite
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    572
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Haute Vienne (Limousin)

    Informations forums :
    Inscription : Juin 2005
    Messages : 572
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <script language='javascript'>
    window.close();
    </script>
    à la déconnexion ?

  5. #5
    Membre éprouvé Avatar de julien.63
    Profil pro
    balayeur
    Inscrit en
    Décembre 2005
    Messages
    1 348
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : balayeur

    Informations forums :
    Inscription : Décembre 2005
    Messages : 1 348
    Par défaut
    Le souci c'est que tu pourras les effacer autant de fois que tu veux,
    quand l'utilisateur recharge la page, il recrée les variables sessions.
    Je n'avais jamais vraiment fait attention à ce souci.
    Il faut que le navigateur "oubli" la valeur des $_POST une fois traité.
    Est ce qu'en mettant no-cache dans les pages formulaire et reception du formulaire?

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 124
    Par défaut
    Merci pour votre aide.

    En ce qui concerne le "windows.close ()", je voudrais éviter.
    En dernier recours pourquoi pas.

    Et en ce qui concerne <META Http-Equiv="Pragma" Content="no-cache">, ça ne change rien.
    J'ai fait un test sur ce forum. Si je me déconnecte et que je fais précédent j'ai accès à la dernière page vue mais je ne peux rien faire d'autre. Par exemple si je veux poster un message je suis redirigé sur la page d'identification.
    J'ai essayé sur un autre site et c'est pareil, on n'est pas reconnecté.

    Je me permets de vous mettre mon code dès fois qu'il y ait une grosse bourde que je ne vois pas.

    Code sur les pages nécessitant une identification :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    <?php
    session_start();
     
    $filename = "sessions.php4";
    if (file_exists ($filename)) require_once ($filename);
    set_time_limit  (0);
     
    controleAcces ();
    ?>
    Et code du fichier sessions.php4 (qui appèlent un autre fichier contenant les constantes pour la connexino à la base) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
     
    <?php
    $filename = "constantes.php4";
    if (file_exists ($filename)) require_once ($filename);
    set_time_limit  (0);
     
    function connect($host = SERVEUR, $login = LOGIN, $pass = PASS, $base = BASE)
    {
    	$connection = @mysql_pconnect($host, $login, $pass) or die("Connection à ".$host." impossible\n");
    	mysql_select_db($base, $connection) or die("Accès à la base ".$base." impossible\n");
    	return $connection;
    }
     
    function formulaire ($page, $login)
    {
    	$_SESSION = array ();
    	$form =
    	"
    	<html>
    	<head>
    		<META Http-Equiv=\"Pragma\" Content=\"no-cache\">
    	</head>
    	<body>
    	<form method=\"post\" action=\"$page\">
    		<table align=\"center\">
    		<tr>
    			<td>Identifiant: </td>
    			<td align=\"right\">
    				<input type=\"text\" name=\"login\" value=\"$login\">
    			</td>
    		</tr>
    		<tr>
    			<td>Mot de passe: </td>
    			<td align=\"right\">
    				<input type=\"password\" name=\"pass\">
    			</td>
    		</tr>
    		<tr>
    			<td colspan=\"100%\" align=\"right\">
    				<input type=\"submit\" name=\"valider\" value=\"Valider\">
    			</td>
    		</tr>
    		</table>
    	</form>
    	</body>
    	</html>
    	";
     
    	print ($form);
    }
     
    function logoff ()
    {
    	$_POST		=	array ();
    	$_SESSION = array ();
    	session_unset			();
    	session_destroy		();
    }
     
    function verifSession ($dblink, $infoIdent)
    {
    	$login = $infoIdent['login'];
    	$pass = $infoIdent['pass'];
    	$requette0 = "SELECT * FROM user WHERE login='$login' AND pass=password('$pass')";
    	$resultat0 = mysql_query($requette0);
    	$objet0 = mysql_fetch_object($resultat0);
     
      if($objet0)
      	return TRUE;
      else
      	return FALSE;
    }
     
    function controleAcces ()
    {
    	global $_POST;
    	global $_SESSION;
    	$dblink		= connect();
    	$page			= "index.php4";
     
    	if (isset ($_GET ['disconnect']))
    	{
    		logoff ();
    		header ("Location:".$page."");
    	}
    	if (isSet ($_SESSION ['login']) && isSet($_SESSION ['pass']))	//  $_SESSION existe
    	{
    		if (verifSession ($dblink, $_SESSION))		//couple login/pass correct
    		{
    			$message = "<center>Vous etes connecté en tant que <b>".$_SESSION ['login']."</b>.     
    			<a href=\"".$page."?disconnect\">déconnection</a></b></center><br>";
    			print ($message);
    			return;
    		}
    		else			//couple login/pass incorrect
    		{
    			$message = "<center><b>Session invalide.</b></center><br>";
    			print ($message);
    			$login = $_SESSION['login'];
    		}
    	}
    	if (isSet ($_POST ['login']) && isSet($_POST ['pass']))		//on a rentré des infos dans le formulaire
    	{
    		if (verifSession ($dblink, $_POST))			//couple login/pass correct
    		{
    			$message = "<center><b>Identification correcte.     
    			<a href=\"".$page."?disconnect\">déconnection</a></b></center><br>";
    			print ($message);
    			$_SESSION ['login']	= $_POST['login'];
    			$_SESSION ['pass']	= $_POST['pass'];
    			$_POST		=	array ();
    			return;
    		}
    		else			//couple login/pass incorrect
    		{
    			$message = "<center><b>Identifiant et (ou) mot de passe invalide(s).</b></center><br>";
    			print ($message);
    			$login = $_POST['login'];
    		}
    	}
     
    	formulaire ($page, $login);
    	exit;
    }
    ?>

  7. #7
    Membre éprouvé Avatar de julien.63
    Profil pro
    balayeur
    Inscrit en
    Décembre 2005
    Messages
    1 348
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : balayeur

    Informations forums :
    Inscription : Décembre 2005
    Messages : 1 348
    Par défaut
    J'ai pas regardé ton code en détail
    mais j'ai vérifié dans le mien, quand une personne se déconnecte et qu'elle fait précédent, elle n'accède pas au contenu des pages. Elle doit se reconnecter.


    Quand une personne soumet le formulaire d'authentification, si les login / password sont bons:
    * j'initialise les variables de sessions
    * elle est redirigée vers une autre page à laquelle elle ne peut accéder que si les variables de sessions. Dans le cas contraire elle est redirigée vers le formulaire.

    j'espère que ça pourra t'aider

Discussions similaires

  1. [eZ Publish] Variable de session effacé
    Par enibib dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 4
    Dernier message: 11/07/2011, 11h53
  2. Comment effacer toutes les variables de sessions en une fois
    Par dessinateurttuyen dans le forum Langage
    Réponses: 4
    Dernier message: 03/08/2006, 09h20
  3. Effacer les variables de session
    Par glsn dans le forum ASP
    Réponses: 2
    Dernier message: 12/12/2003, 13h42
  4. Variable de session
    Par Sadneth dans le forum ASP
    Réponses: 6
    Dernier message: 14/11/2003, 11h12
  5. variable de session
    Par divableue dans le forum ASP
    Réponses: 2
    Dernier message: 23/10/2003, 16h04

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo