PHP|Débutant :: Forums

Advertisement

Besoin d'aide ? N'hésitez pas, mais respectez les règles

Vous n'êtes pas identifié(e).

#1 27-05-2010 10:21:45

Maximeus
Membre
Inscription : 08-06-2009
Messages : 20

Garder les valeurs de login dans une session

Bonjour,

Je vous contacte concernant votre article sur les sessions.

Comme mon site a un espace membre, j'ai suivi cet article (pratiquement à l'identique) pour créer un système de sessions.

Toutefois, je rencontre un souci quant au maintient des valeurs durant la navigation sur le site.

Mon site contient une page index.php.

Cette page contient d'autres pages php en  <?php include(''); ?> (par exemple <?php include('member_login.php'); ?>).

Comme c'est uniquement ma page index.php qui est appelée lorsque je clique sur une lien (par exemple index.php?page=xyz), j'ai mis le code session_start(); en tête de la page

Si j'utilise mon formulaire de login et que je clique sur le bouton Connexion, les valeurs sont bien transmises et la page m'affiche que je suis bien logué en tant que membre.

Or, si je clique sur un lien appelant un des articles du site, la session saute (ce qui veut dire que les valeurs ne sont pas gardées dans ma session)

Comment puis-je pallier à ce problème? La fonction session_start() n'est-elle pas censée garder en mémoire les valeurs sans devoir les envoyés via une GET ou un POST ou encore un COOKIE?

Merci d'avance

Hors ligne

#2 27-05-2010 11:31:00

xTG
GrandGourou
Inscription : 18-06-2009
Messages : 1 127
Site Web

Re : Garder les valeurs de login dans une session

Es-tu sûr de passer toujours par index.php (traitement d'un formulaire ?) ?

Es-tu sûr que ton script d'enregistrement des variables de sessions ne s'éxécute pas à chaque rechargement de la page index.php ? (donc si pas d'envoi de login il écrase avec du vide)

Hors ligne

#3 27-05-2010 12:26:30

Maximeus
Membre
Inscription : 08-06-2009
Messages : 20

Re : Garder les valeurs de login dans une session

Salut xTG,
Concernant mes liens et mes formulaires, ils font toujours appel à la page index.php (les liens sont toujours en format index.php?p=xyz).
Comme j'ai des includes dans ma page index.php, je n'ai mis session_start() uniquement dans au début cette page (les autres pages n'en ont pas besoin car elles sont incluses dans la page principale).
Comme tu le soulignes, il est possible qu'à chaque chargement de ma page index.php, il efface mes valeurs. Le formulaire de login est en permanence visible sur mon site. Donc à chaque chargement de la page, les champs du formulaire se vident.
Mais franchement, je ne vois pas comment remédier à celle-là...
Une petite idée?
Merci

Hors ligne

#4 27-05-2010 19:21:05

xTG
GrandGourou
Inscription : 18-06-2009
Messages : 1 127
Site Web

Re : Garder les valeurs de login dans une session

un truc comme ceci :

if( !empty($_REQUEST['action']) && $_REQUEST['action'] == "login" )
{
  $_SESSION['username'] = $_POST['username'];
}

Et dans ton form : index.php?action=login
Bien sûr c'est juste le concept ce script n'est surtout pas à utiliser tel quel... Je ne vérifie rien et ne protège rien. ^^

Hors ligne

#5 28-05-2010 08:01:39

Maximeus
Membre
Inscription : 08-06-2009
Messages : 20

Re : Garder les valeurs de login dans une session

J'ajoute la page php que j'ai mis en tête de index.php. Ce sera peut-être plus simple smile

<?php
/* ON DEMARRE UNE SESSION */
session_start();
/* ON PART DE L'IDEE QUE LE LOGIN NE FONCTIONNE PAS */
$login_ok = false;
/* ON VERIFIE SI LES INFORMATIONS ONT ETE POSTEES */
if (isset($_POST) && (!EMPTY($_POST['username'])) && (!EMPTY($_POST['password'])))
{extract($_POST);
/* CONNEXION AU SERVEUR */
$db = mysql_connect('localhost', 'utilisateur', 'motdepasse');
/* CONNEXION A LA BASE DE DONNEES */
mysql_select_db('membre',$db);
/* REQUETE SQL */
$request_member = 'SELECT ';
$request_member .= 'member_info.info_id, member_info.email, member_password.password_id, member_password.password ';
$request_member .= 'FROM ';
$request_member .= 'member ';
$request_member .= 'JOIN member_info ON (member_info.info_id=member.info_id) ';
$request_member .= 'JOIN member_password ON (member_password.password_id=member.password_id) ';
$request_member .= 'WHERE member_info.email="'.$username.'"';
$result_member = mysql_query($request_member);
if (mysql_num_rows($result_member) > 0)
{
$data = mysql_fetch_assoc($result_member);
if ($password == $data['password'])
{$login_ok = true;}
}
/* ON LIBERE L'ESPACE MEMOIRE ALLOUE POUR CETTE REQUETE */
mysql_free_result ($result_member);
/* ON FERME LA CONNEXION A LA BASE DE DONNEES */
mysql_close ();
}
/* SI LE LOGIN EST OK ON AFFICHE LES DONNEES */
if ($login_ok)
{
$_SESSION['username'] = $data['email'];
$_SESSION['password'] = $data['password'];
}
else {echo 'Merci de vous loguer svp';}
?>

Pour résumer, si je me logue pas de problème. Par contre, dès que je clique sur un lien qui va recharger la page index.php, les données de la session sont perdues.

Petite question supplémentaire...Suis-je obligé de mettre les valeurs de la session dans chacun de mes lien?

Merci

NdM Alnoss : J'ai édité ton post pour rajouter la balise php (couleur) et virer les ////// qui rendent le code presque invisible tellement tu en mets ^^

Dernière modification par Maximeus (28-05-2010 08:03:45)

Hors ligne

#6 28-05-2010 08:32:48

Alnoss
Modérateur absent
Lieu : 06 - PACA
Inscription : 11-05-2009
Messages : 541
Site Web

Re : Garder les valeurs de login dans une session

Outre l'édition de ton post, je te conseille de préciser le type de JOIN que tu mets dans tes requêtes :
INNER - LEFT - RIGHT - etc....

Ensuite, ton


/* SI LE LOGIN EST OK ON AFFICHE LES DONNEES */
if ($login_ok) {
$_SESSION['username'] = $data['email']; /* /!\ T'es sûr là ?????? */
$_SESSION['password'] = $data['password'];
}
 

N'affiche rien, mais modifie les valeurs stockées dans les sessions par la valeur de $data['email'] ou $data['password']

J'opte plus pour un

$_SESSION['username'] = $_POST['username'];

P.S : NON, les sessions sont justement là pour éviter de les passer dans l'url !!!!!


MERCI de lire le mode d'emploi avant de poster !!

Hors ligne

#7 28-05-2010 08:57:01

Maximeus
Membre
Inscription : 08-06-2009
Messages : 20

Re : Garder les valeurs de login dans une session

Salut Alnoss,

Merci pour ton conseil sur les JOIN. Je reverrai ma requête.

Concernant mon code

$_SESSION['username'] = $data['email']; /* /!\ T'es sûr là ?????? */

$data['']; correspond à la valeur dans ma table member_info. C'est vrai que cela peut porter à confusion, mais c'est la même valeur que $_POST['username'];.

J'ai quand même essayé à ta façon, mais le résultat est identique.

J'ai fait un autre test:

1) J'ai créé une nouvelle page index.php avec mon code session ci-dessus et le formulaire de connexion (sans <?php include(''); ?>)
2) Ensuite j'ai créé une page test_session.php indépendante (pas incluse dans index.php)

Lorsque je clique sur le lien qui m'amène à la page test_session.php , les valeurs de ma session sont bien transmises à cette page.

Donc, du moment que j'appelle une page en <?php include(''); ?> dans ma page index.php, cela pose problème...

Dernière modification par Maximeus (28-05-2010 09:00:22)

Hors ligne

#8 28-05-2010 09:45:16

xTG
GrandGourou
Inscription : 18-06-2009
Messages : 1 127
Site Web

Re : Garder les valeurs de login dans une session

Il serait bon alors de regarder tes pages en inclusions.
Des fois il est facile de se planter dans une condition, par exemple :

if( $_SESSION['username'] = "" ) /* Alors qu'il faudrait mettre if( $_SESSION['username'] == "" ) */
  echo "Non connecté";

Le simple oubli d'un "=" rend ce code permanent et écrase la valeur.

Hors ligne

Pied de page des forums