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 :

perdu dans les sessions [PHP 5.3]


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
    70
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 70
    Par défaut perdu dans les sessions
    Bonsoir,

    Je suis un peu perdu dans les sessions
    j'essaie de garder une session ouverte mais ca n'a pas l'ère de fonctionner.

    j'utilise un système de pseudo frames et donc je voudrai faire une partie du site accessible avec authentification sinon sois la page login et ou autre.

    Merci.


    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
    <?php
    // initialisation
    session_start();
    ?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    	<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
    		<head>
    			<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    			<title>Régie de recette Des espaces Cyber-base</title>
    			<link rel="stylesheet" type="text/css" href="style.css" />
    			<link rel="stylesheet" type="text/css" href="index.css" />		
    		<!-- calendar stuff -->
    			<link rel="stylesheet" type="text/css" href="calendar/css/jscal2.css" />
    			<link rel="stylesheet" type="text/css" href="calendar/css/border-radius.css" />
    			<link rel="stylesheet" type="text/css" href="calendar/css/steel/steel.css" />
    			<link rel="stylesheet" type="text/css" href="css/redmond/jquery-ui-1.7.2.custom.css" />
    			<script type="text/javascript" src="js/jquery-1.3.2.min.js"></script>
    			<script type="text/javascript" src="js/jquery-ui-1.7.2.custom.min.js"></script>
    			<script type="text/javascript" src="js/ui.datepicker.js"></script>
    		<!-- END calendar stuff -->
    			<?php require('js/index.js'); ?>
    		</head>
    <body>
    <div id="global">
    	<div id="header">
    	<div id="entete"></div>
    	<div id="bg_menu1"><?php include('pages/menu_inline.php');   // Nous appelons notre menu ?></div>
    	</div>
    	<div id="centre">
    		<div id="navigation"><?php include('pages/menu.php');   // Nous appelons notre menu ?></div>
    		<div id="principal">
    		<?php
    $_SESSION['connect'] = false; //initialise la variable 'connect'
     
    if (isset($_POST['mot_de_passe']) AND isset($_POST['login'])) // Si les variables existent
    {
            $mot_de_passe = htmlspecialchars(stripcslashes($_POST['mot_de_passe']));
            $login = htmlspecialchars(stripcslashes($_POST['login']));//On récupère les données envoyées par la méthode POST du formulaire d'identification
    }
     
    else // Les variables n'existent pas encore
    {
            $mot_de_passe = "";
            $login = "";// On crée des variables $mot_de_passe  et $login vides
    }
     
    if (($mot_de_passe == "v" AND $login == "v") OR ($mot_de_passe == "a" AND $login == "a"))
    // Si le mot de passe et le login sont bons.
     
    {
            $_SESSION['connect']=true; // Change la valeur de la variable connect. C'est elle qui nous permettra de savoir s'il y eu identification.
            $_SESSION['login']=$login;// Permet de récupérer le login afin de personnaliser la navigation
    // On affiche la page cachée.
     
    				$page = (!empty($_GET['page'])) ? htmlentities($_GET['page']) : 'index';
     
    				// On définit le tableau contenant les pages autorisées
    				// ----------------------------------------------------
    				$pageOK = array('index' => 'pages/form.php',
    								'2' => 'pages/confirm.php',
    								'3' => 'pages/search.php',
    								'4' => 'pages/liens.php',
    								'5' => 'pages/export.php',							
    								'999' => 'pages/processor.php');
     
    				// On teste que le paramètre d'url existe et qu'il est bien autorisé
    				// -----------------------------------------------------------------
    				if(!array_key_exists($page, $pageOK)) include('error.php');
    				elseif(!is_file($pageOK[$page])) include('error.php');
    				else include($pageOK[$page]);
     
    } else { 
    $page = (!empty($_GET['page'])) ? htmlentities($_GET['page']) : 'login';
     
    				// On définit le tableau contenant les pages autorisées
    				// ----------------------------------------------------
    				$pageOK = array('4' => 'pages/liens.php',
    								'login' => 'login.php');
     
    				// On teste que le paramètre d'url existe et qu'il est bien autorisé
    				// -----------------------------------------------------------------
    				if(!array_key_exists($page, $pageOK)) include('error.php');
    				elseif(!is_file($pageOK[$page])) include('error.php');
    				else include($pageOK[$page]);
    } // Fin du else
    // Fin du code :)
    ?>
    	  </div>
    		<!-- <div id="secondaire"></div>-->
    	</div>
    	<div id="pied">fahdo</div>
    </div>
    </body>
    </html>

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $_SESSION['connect'] = false; //initialise la variable 'connect'
    si a chaque fois qu'il arrive sur la page tu deconnectes l'utilisateur, forcemment ca ne va pas.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

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

    Informations forums :
    Inscription : Mars 2006
    Messages : 70
    Par défaut
    Bon j'arrive toujours pas a les faire marcher lol

    j'ai essayé

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $_SESSION['connect'] = true;
    $_SESSION['connect'] = 1;
    $_SESSION['connect'] = "";
    et sans mais rien n'y fait

  4. #4
    Membre chevronné
    Avatar de hornetbzz
    Homme Profil pro
    Directeur commercial
    Inscrit en
    Octobre 2009
    Messages
    482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France

    Informations professionnelles :
    Activité : Directeur commercial

    Informations forums :
    Inscription : Octobre 2009
    Messages : 482
    Par défaut
    C'est normal... Tu ne fais pas porter tes tests sur $_SESSION['connect'] donc en l'occurrence il ne te sert à rien.

  5. #5
    Membre chevronné
    Avatar de hornetbzz
    Homme Profil pro
    Directeur commercial
    Inscrit en
    Octobre 2009
    Messages
    482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France

    Informations professionnelles :
    Activité : Directeur commercial

    Informations forums :
    Inscription : Octobre 2009
    Messages : 482
    Par défaut
    Pour m'expliquer, à la louche sans avoir fait de tests, ça donnerait ça:
    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
    $_SESSION['connect'] = (!isset($_SESSION['connect'])) ? false : $_SESSION['connect']; //initialise la variable 'connect'
     
    if (isset($_POST['mot_de_passe']) AND isset($_POST['login'])) // Si les variables existent
    {
            $mot_de_passe = htmlspecialchars(stripcslashes($_POST['mot_de_passe']));
            $login = htmlspecialchars(stripcslashes($_POST['login']));//On récupère les données envoyées par la méthode POST du formulaire d'identification
    		if (($mot_de_passe == "v" AND $login == "v") OR ($mot_de_passe == "a" AND $login == "a"))
    		// Si le mot de passe et le login sont bons.
    		{
    			$_SESSION['connect'] = true;
    			$_SESSION['login']=$login;// Permet de récupérer le login afin de personnaliser la navigation
    		}
    		else {
    			$_SESSION['connect'] = false;
    		}
     
    }
     
    if ( $_SESSION['connect'] )
    // On affiche la page cachée.
    { 
    				$page = (!empty($_GET['page'])) ? htmlentities($_GET['page']) : 'index';
     
    				// On définit le tableau contenant les pages autorisées
    				// ----------------------------------------------------
    				$pageOK = array('index' => 'pages/form.php',
    								'2' => 'pages/confirm.php',
    								'3' => 'pages/search.php',
    								'4' => 'pages/liens.php',
    								'5' => 'pages/export.php',							
    								'999' => 'pages/processor.php');
     
    				// On teste que le paramètre d'url existe et qu'il est bien autorisé
    				// -----------------------------------------------------------------
    				if(!array_key_exists($page, $pageOK)) include('error.php');
    				elseif(!is_file($pageOK[$page])) include('error.php');
    				else include($pageOK[$page]);
     
    } else { 
    				$page = (!empty($_GET['page'])) ? htmlentities($_GET['page']) : 'login';
     
    				// On définit le tableau contenant les pages autorisées
    				// ----------------------------------------------------
    				$pageOK = array('4' => 'pages/liens.php',
    								'login' => 'login.php');
     
    				// On teste que le paramètre d'url existe et qu'il est bien autorisé
    				// -----------------------------------------------------------------
    				if(!array_key_exists($page, $pageOK)) include('error.php');
    				elseif(!is_file($pageOK[$page])) include('error.php');
    				else include($pageOK[$page]);
    }

  6. #6
    Membre Expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Par défaut
    Salut

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    ... codes ...
    $_SESSION['connect'] = true;
    $_SESSION['login']=$login;// Permet de récupérer le login afin de personnaliser la navigation
    // On recharge la même page
    header('location:la_meme_page.php');
    ... code ...
    Personnellement je ferais une redirection ici, ce sera transparent.
    Comme la session 'Connect' vient d'être initialisé à true, lors du rechargement de la page on entrera dans la condition.

    Cependant, une vérification sur la session de login est tout de même nécessaire, sait on jamais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    if ($_SESSION['connect'] === true) {
            // Vérification du login
            if ($_SESSION['login'] !== 'valide') {
            $_SESSION['Connect'] = false;
            $_SESSION['login'] = false;
            // ERREUR : Retour au login
            header('location: la_meme_page.php?page=login');
        }
     
        //-------------------------------------------------------
        // On affiche le contenu selon l'utilisateur / page demandée
        //-------------------------------------------------------
    }
    Les redirections me semble plus simple à faire que des successions de if pour traiter tous les cas.

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

    Informations forums :
    Inscription : Mars 2006
    Messages : 70
    Par défaut
    Bonsoir,

    j'ai testé les deux et j'ai retenu la version de @hornetbzz

    @RunCodePhp ton code m'affichait une erreur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Cannot modify header information - headers already sent by
    par contre je charge les menus en fonction de l'état de la session et lors de la connexion, les menus restent a l'état du else sauf si je change de page.

    une idée ?

    Code menu.php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <?php
    $_SESSION['connect'] = (!isset($_SESSION['connect'])) ? false : $_SESSION['connect'];
    if ( $_SESSION['connect'] ) // Si les variables existent
    { ?>
    <ul id="menu1">
    	<li><a href="index.php?page=index" id="declarerinline" title="Déclarer">Déclarer</a></li>
    	<li><a href="index.php?page=3" id="exporterinline" title="Exporter">Exporter</a></li>
    	<li><a href="index.php?page=4" id="liensinline" title="Liens utiles">Liens utiles</a></li>
    </ul>
    <?php } else { ?>
    <ul id="menu1">	
    <li><a href="index.php?page=4" id="liensinline" title="Liens utiles">Liens utiles</a></li>
    </ul>
    <?php } ?>


    Code login.php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <h2>Authentification</h2>
    <div style="text-align:center; margin:0px; padding:40px 0px 0px 0px;">
    	<p><h3>Indentifiez vous :&nbsp;</h3></p>
    	<form action="index.php" method="post">
    	<p>Login : <input type="text" name="login" tabindex="10"/></p>
    	<p>Mot de passe : <input type="password" name="mot_de_passe" tabindex="20"/></p>
    	<p><input id="saveForm" type="image" class="mainForm" src="imgs/btn_valider.png" value="Envoyer" tabindex="30"/></p>
    	</form>
    </div>

  8. #8
    Membre Expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Par défaut
    par contre je charge les menus en fonction de l'état de la session et lors de la connexion, les menus restent a l'état du else sauf si je change de page.
    Peut être est ce dû au moment ou tu affiche le menu, car si tu affiche le menu avant la vérification du login/passe, la session 'Connect' ne sera jamais à true.

    En somme, il faut respecter l'ordre des traitements, de la procédure.
    - En 1er on initialise à false si le 'Connect' n'existe pas.
    - Ensuite on vérifie s'il y a un login/passe renvoyé par POST, on vérifie s'ils sont valides. On initilise le 'Connect'.
    - Ce n'est qu'à ce moment ou on adapte le contenu selon l'état du 'Connect'
    -
    a/ Si TRUE : on affiche la page demandée + menu_complet
    b/ Sinon (FALSE) le 'Connect' est faut -> Contenu login + mini_menu

    C'est le déroulement qu'à proposé hornetbzz.



    Peut être réinitialise tu ce 'Connect' entre temps à false alors quelle était à true, ce qui ne devrait pas être le cas.

    Je ne vois pas d'autre raisons.

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

    Informations forums :
    Inscription : Mars 2006
    Messages : 70
    Par défaut
    Oki, merci

    j'ai mis cette partie du code dans un fichier et je l'ai requis juste après la balise body et ca marche

    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
    $_SESSION['connect'] = (!isset($_SESSION['connect'])) ? false : $_SESSION['connect']; //initialise la variable 'connect'
     
    if (isset($_POST['mot_de_passe']) AND isset($_POST['login'])) // Si les variables existent
    {
            $mot_de_passe = htmlspecialchars(stripcslashes($_POST['mot_de_passe']));
            $login = htmlspecialchars(stripcslashes($_POST['login']));//On récupère les données envoyées par la méthode POST du formulaire d'identification
    		if (($mot_de_passe == "v" AND $login == "v") OR ($mot_de_passe == "a" AND $login == "a"))
    		// Si le mot de passe et le login sont bons.
    		{
    			$_SESSION['connect'] = true;
    			$_SESSION['login']=$login;// Permet de récupérer le login afin de personnaliser la navigation
    		}
    		else {
    			$_SESSION['connect'] = false;
    		}
     
    }
    Donc résolu

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Perdu dans les numéros de versions de l'Application Server
    Par Christophe P. dans le forum Oracle
    Réponses: 4
    Dernier message: 28/06/2007, 15h33
  2. Perdu dans les joins
    Par kabkab dans le forum Requêtes
    Réponses: 1
    Dernier message: 15/03/2007, 23h16
  3. perdu dans les fonctions en c++ builder
    Par davidc dans le forum C++Builder
    Réponses: 2
    Dernier message: 15/02/2007, 16h22
  4. [Débutant] Perdu dans les streams
    Par Le Furet dans le forum Collection et Stream
    Réponses: 7
    Dernier message: 04/01/2007, 10h58
  5. Perdue dans les Response.Write...
    Par Tapioca dans le forum ASP
    Réponses: 4
    Dernier message: 11/07/2004, 11h54

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