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 :

Conserver 1 session sur x pages


Sujet :

Langage PHP

  1. #1
    Membre éclairé Avatar de tigunn
    Homme Profil pro
    Développeur de bug
    Inscrit en
    Janvier 2003
    Messages
    608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur de bug

    Informations forums :
    Inscription : Janvier 2003
    Messages : 608
    Points : 658
    Points
    658
    Par défaut Conserver 1 session sur x pages
    Salut la compagnie,

    VOila cela fait quelque temps que je n'avais dev de site en php. Du coup, ma mémoire largement défaillante m'oblige a vous demander quelque chose d'assez genant:
    J'ai une page index.php dans laquelle se trouve inclut une autre identification.php (un formulaire login/pwd en fait qui se retrouve sur toutes les pages). Je souhaiterais conserver les infos sur l'utilisateur dans $_SESSION["mon_tableau"]. Mais en fait, poour l'instant je crée plutot une session a chaque page ( ).
    Alors voilà qq bouts de code:
    index.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <?php
    //definition des includes
    include_once '....';
     
    echo 'session_id = '.session_id();   // un id different a chaque page ou F5
    echo '<pre>';
    print_r($_SESSION);                    // toujours vide?!!!!?
    echo '</pre>';
    ?>
    <html>....<?php
    		include_once '.\lib\display\identification.php';
    		?>.....
    identification.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <?PHP
    @session_start();
     
    // test si user est deja identifie
    if (isset($_SESSION['user_data'])) {
    	$user_connecte=true;
    }else
    {$user=array();   //rempli par requete sql => ok
    // on ecrit dans la session en cours les infos de l'user
    			$_SESSION["user_data"] 	= $user;
    			session_write_close();
    			$user_connecte=true;
    }
    Mais il me cree une session a chaque fois et je n'arrive pas a la recuperer sur les pages ou identification.php est inclus. Je veux dire j'ai un petit texte "bonjour ".$_SESSION['user_data']['prenom'].' '.$_SESSION['user_data']['nom'] dans identification qui est defini mais je n'arrive pas à faire la même chose pour index.php.
    Merci de votre aide.

  2. #2
    FoxLeRenard
    Invité(e)
    Par défaut
    Ce serait bien d'en savoir plus,
    normalement en haut de TOUTES TES PAGES PHP
    (pas des includes bien sur )
    tu dois avoir bien collé en haut de ta page
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <?PHP
    session_start();
    include("gere_session.php");
    //et apres tout ce que tu veux
    Dans le fichier
    gere_session.php pour ne pas effacer ta session si elle existe
    tu auras
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <?PHP
    if (!isset($_SESSION['LeSon']))   {$_SESSION['LeSon']="N";$LeSon="N";}
         else {$LeSon=$_SESSION['LeSon'];}
    //ETC...

  3. #3
    Membre éclairé Avatar de tigunn
    Homme Profil pro
    Développeur de bug
    Inscrit en
    Janvier 2003
    Messages
    608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur de bug

    Informations forums :
    Inscription : Janvier 2003
    Messages : 608
    Points : 658
    Points
    658
    Par défaut
    Merci Fox pour ta réponse mais je suis pas encore "sorti de l'auberge".
    J'ai placé le session_start() en haut de index.php:
    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
    <?php
    session_start();
     
    //definition des includes
    include_once '......';
    include_once '.\identification.php';
     
    print_header('Titre', 'sous-titre');
     
    echo 'session_id = '.session_id();
    echo '<pre>';
    print_r($_SESSION);
    echo '</pre>';
    ?>
    <body>
    Voila le debut d'index.php, et ci suit identification.php:
    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
    <?PHP
    /*
    Block d'identification dans une div
    repete a chaque page
    */
    //definitionn des variables
    $connection_error=false;
    $connecte=false;
     
    // test si user est deja identifie
    if (isset($_SESSION['user_data'])) {
    	$connecte=true;
    	echo 'data';
    }
    else {
    	// traitement loging
    Donc tant que je reste sur index.php c'est bon ( ), j'ai les infos stockées dans ma session; MON problème c'est quant je quitte index.php pour une autre page, contact.php par exemple: là je perds ma session (plus le même id de session).
    Voici le code de contact.php:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <?php
    session_start();
     
    //definition des includes
    include_once '....';
    include_once '..\..\lib\display\identification.php';
     
    // defintion de variables
    ...;
    // traitement de la demande de contact
    if(isset($_REQUEST['formulaire'])){

  4. #4
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2007
    Messages
    148
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2007
    Messages : 148
    Points : 186
    Points
    186
    Par défaut
    Bonjour,

    Quelque soit ta page il faut quelque chose comme ça où tu auras l'ouverture du session_start(), suivit de la vérification des sessions, et si le membre n'est pas connecté tu peux afficher le formulaire le permettant.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <?php
    session_start();
    if(isset($_SESSION['idMember']) AND !empty($_SESSION['idMember'])
    {
    $connect = true;
    }
    else
    {
    $connect = false;
    include_once("connexion.php");
    }
    ?>

    Dans ta page contact.php tu as un include_once(); regarde si le chemin vers le fichier est correct, car j'utilise le même principe sur un de mes sites et tout fonctionne.


    GoT

  5. #5
    Membre éclairé Avatar de tigunn
    Homme Profil pro
    Développeur de bug
    Inscrit en
    Janvier 2003
    Messages
    608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur de bug

    Informations forums :
    Inscription : Janvier 2003
    Messages : 608
    Points : 658
    Points
    658
    Par défaut
    J'ai peut être un défaut de logique dans ma construction des pages:
    je fais session_start() sur chaque page php (index, contact, ...) sur chacune de ses pages je fait un include_once(identification.php) (bon chemin) qui n'est rien de plus qu'un formulaire de login/password et:
    - un lien (vers la page d'inscription) ssi $_SESSION['user_data'] que je teste dans identification.php n'est pas definit ou rempli;
    - ou un texte qui dit "bonjour ".$_SESSION['user_data']['nom'] ssi $_SESSION['user_data'] que je teste dans identification.php est pas definit et rempli.
    idenitification.php:
    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
    <?PHP
    /*
    
    Block d'identification
    
    repete a chaque page
    
    */
    //definitionn des variables
    $connection_error=false;
    $user_connecte=false;
     
    // test si user est deja identifie
    if (isset($_SESSION['user_data'])) {
    	$user_connecte=true;
    }
    else {
    	// traitement loging
    	if(isset($_REQUEST['....']) && isset($_REQUEST['....'])){
     
    		// connexion a la base
    		$res_conn=mysql_connect("...","...","") or die("Impossible de se connecter au serveur MySQL : <br>".mysql_error());
    		$res_select_db=mysql_select_db("bi") or die("La base de donnée <i>BI</i> n'existe pas : <br>".mysql_error());
    		$log = my_addslashes($_REQUEST['....']);
    		$pwd = my_addslashes($_REQUEST['.....']);
    		$user = db_query('SELECT.....');
    		$user = db_fetch_array($user); //retourne 1 resultat = OK
    		// fermeture Bdd
    		$close=mysql_close();
    		if($user['login'])
    		{
    			// on ecrit dans la session en cours les infos de l'user
    			$_SESSION["user_data"] 	= $user;  //ca je voudrais le conserver sur toutes les pages
    			session_write_close();
    			$user_connecte=true;
    		}
    		else
    		{
    			//echo 'Erreur de connexion';
    			$connection_error=true;
    		}
    	}
    	else
    	{
    		// utilisateur n'essaye pas de se connecter
    	}
     
    }
    ?>
     
    		<div id="identification" title="Identifiez vous">
    			<!-- Encadre de Login -->
     
    			<form action="<?php $_SERVER['PHP_SELF']?>" method="POST">
    				<!-- formulaire qui recharge la meme page -->
    				<table>
    					<tr class="rubrique" title="Votre login">
    						<th class="intitule" align="left">
    							Login
    						</th>
    						<td>&nbsp;</td>
    						<td align="right">
    							<input tabindex="1" type="text" name="...." maxlength="20">
    						</td>
    					</tr>
    					<tr class="rubrique" title="Votre mot de passe">
    						<th class="intitule" align="left">
    							Password
    						</th>
    						<td>&nbsp;</td>
    						<td align="right">
    							<input tabindex="2" type="password" name="....." maxlength="10">
    						</td>
    					</tr>
     
    					<tr>
    						<td colspan="3" align="right">
     
    							<span class="bouton">
    								<input tabindex="3" type="submit" value="Entrer">
    							</span>
    							</br>
    						</td>
    					</tr>
    				</table>
    			</form>
    			<?php
    			 // test si utilisateur connu
    			 if (($connection_error) or ($user_connecte==false)) {
    			 	echo '<div id="inscription" title="Vous souhaitez participer?">
    				<a href="./src/pages/inscription.php" class="liens_bas">Inscription</a>
    				</div>';
    			 }
    			 else {
    			 	echo '<div id="inscription" title="Votre profil">
    				<p class="msg_identification">Bienvenue '.$_SESSION['user_data']['prenom'].' '.$_SESSION['user_data']['nom'].'</p>
    				</div>';
    			 }
    			?>
    		</div>
    Mon problème reste le même: si je m'identifie sur une page index ou contact, j'ai creation d'une session differente (1 par page ce qui est bien idiot). Or je ne voudrais qu'une seule session (normal).
    J'ajoute en plus, la partie concernant les sessions de mon phpinfo():
    session
    Session Support enabled
    Registered save handlers files user sqlite
    Registered serializer handlers php php_binary wddx

    Directive Local Value Master Value
    session.auto_start Off Off
    session.bug_compat_42 Off Off
    session.bug_compat_warn On On
    session.cache_expire 180 180
    session.cache_limiter nocache nocache
    session.cookie_domain no value no value
    session.cookie_httponly Off Off
    session.cookie_lifetime 0 0
    session.cookie_path / /
    session.cookie_secure Off Off
    session.entropy_file no value no value
    session.entropy_length 0 0
    session.gc_divisor 1000 1000
    session.gc_maxlifetime 1440 1440
    session.gc_probability 1 1
    session.hash_bits_per_character 5 5
    session.hash_function 0 0
    session.name PHPSESSID PHPSESSID
    session.referer_check no value no value
    session.save_handler files files
    session.save_path c:/wamp/tmp c:/wamp/tmp
    session.serialize_handler php php
    session.use_cookies On On
    session.use_only_cookies Off Off
    session.use_trans_sid 0 0

  6. #6
    FoxLeRenard
    Invité(e)
    Par défaut
    Il y a trois choses que je t'ais indiquées et qui sont primordiales

    1) Ne manipules tes valeurs de sessions que par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    if (!isset($_SESSION['LeSon']))   {$_SESSION['LeSon']="N";$LeSon="N";}
         else {$LeSon=$_SESSION['LeSon'];}
    //ETC... puis utilises la variable $LeSon par exemple !
    2) ouvre ta session tout enhaut de tout tes PHP sauf les INCLUDES

    3) colles bien le session_start(); au bord de chaque page PHP non include


    Si tu ne fais pas cela, ne viens pas demander pourquoi tu perd ta session

  7. #7
    Membre éclairé Avatar de tigunn
    Homme Profil pro
    Développeur de bug
    Inscrit en
    Janvier 2003
    Messages
    608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur de bug

    Informations forums :
    Inscription : Janvier 2003
    Messages : 608
    Points : 658
    Points
    658
    Par défaut
    merci de ton aide FOxLeREnard (a neuf queues ? lol)
    Bon, j'ai enfin résolu ce petit souci:
    - tous mes fichiers php commencent maintenant par:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <?php
    session_start();
    // test si identifiication faite
    if ((isset($_SESSION['udata'])) && (!empty($_SESSION['udata']))) {
    	$user=$_SESSION['udata'];
    }
    else {
    	$user=array();
    }
    - j'ai viré le session_start() de mon identification.php qui etait en include (ah la honte )
    ET ça marche, cours, enfin c'est reparti alors merci.

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

Discussions similaires

  1. [Web Service] Conserver la session sur le serveur
    Par CaviarNAS dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 20/08/2010, 14h08
  2. Conserver une variable sur plusieurs pages
    Par orleans dans le forum Langage
    Réponses: 2
    Dernier message: 17/01/2008, 17h44
  3. Session sur plusieurs pages
    Par Plougy dans le forum Langage
    Réponses: 14
    Dernier message: 28/05/2007, 22h22
  4. Réponses: 8
    Dernier message: 12/07/2006, 17h28
  5. instantiser une session sur la page d'accueil
    Par Quartus dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 09/05/2006, 13h01

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