Les sessions PHP

Fermé
Signaler
-
 Utilisateur anonyme -
Bonjour,

J'ai un petit problème avec les sessions. Je suis en train de faire un site avec un système de comptes utilisateurs utilisant les sessions php. Donc j'ai un index.php avec un lien vers login.php qui contient la fonction de connexion, c'est à dire qu'à un moment il y aura:

$_SESSION['login'] = login-recupéré-par-le-formulaire

Tout se passe bien quand je lance une connexion, aucun message d'erreur. Après la connexion je mets une redirection automatique sur index.php.

Sur index.php, j'ai mit:

print ($_SESSION['login']);

et là, catastrophe: il ne connait pas la variable.

Je pensais que les variables contenues dans $_SESSION étaient automatiquement accessible à toutes les pages, mais apparemment ce n'est pas le cas.

Faut-il faire un lien entre index.php et login.php autrement que par le formulaire, par exemple en mettant un "include (login.php)" afin de ramener les variables? Y'a-t-il un truc à rajouter, comme une fonction (nom fictif hein) du genre get($_SESSION['login']) afin de transférer les valeurs d'une page à une autre?

Inutile de vous embêter avec un speech de 300 lignes, une indication suffira :D

Merci!

8 réponses


tu à bien pensé à mettre le "session_start();" en hut de chacune de tes pages ?
1
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 41989 internautes nous ont dit merci ce mois-ci

Messages postés
436
Date d'inscription
mercredi 18 février 2009
Statut
Membre
Dernière intervention
24 mai 2009
113
Ami Terrien, as-tu bien mis un " session_start(); " sur ta page index.php et sur la page qui traite ton formulaire d'identification ?
Ouarf, non, pas du tout :D

En fait, je croyais qu'il ne fallait mettre le session_start() qu'au démarrage de la fonction de login, dans login.php, puis qu'après c'était comme un tableau de variables accessible de n'importe quel page durant 30 minutes.

Donc il faut mettre une session_start() en haut de chaque page utilisant les sessions? Il ne risque pas d'y avoir des interférences ou quoi que ce soit?

non, aucun risque d'interférance (du moins je n'en ai jamais eu), tu démarre la session en haut de ta page avec session_start(); et c'est bon, mais il faut obligatoirement le mettre dès que tu veux utiliser une session.
Messages postés
436
Date d'inscription
mercredi 18 février 2009
Statut
Membre
Dernière intervention
24 mai 2009
113
Oui, il faut mettre le session_start au début de chaque page qui utilise les sessions, c'est INDISPENSABLE.

Au début de chaque page, ça veut dire avant le premier "echo", sinon tu auras une erreur genre "Impossible d'envoyer les headers ..."
J'ai pas envie de polluer le forum avec 10000 threads de déutant, alors je pose une question totalement différente ici.

Pour gérer les connexion MySQL, deux choix:

1) créer un fichier du genre connecteur.php (contenant les quelques commandes de connexion) qui sera appelée via un include() dans chaque page où il la faut, et rajouter les mysql_close() à la fin de chaque page où elle est appelée;

OU

2) se connecter à la base de donnée au début de chaque page et rajouter le mysql_close() à la fin de chaque page.

Pour des raisons de programmation, j'avouerais que je préférerais utiliser la seconde solution, mais j'ai peur qu'elle soit trop gourmande en ressource, car par exemple:
- je visualise une new -> connexion puis déconnexion
- je décide de me loguer -> connexion puis déconnexion
- je dépose un commentaire sur une des new -> connexion puis déconnexion

Si on multiplie ça par le nombre de personnes qui se connectent, ça fait pas un peu trop?
De plus, je me demande s'il n'y a pas une différence d'un point de vue sécurité, non?
Messages postés
436
Date d'inscription
mercredi 18 février 2009
Statut
Membre
Dernière intervention
24 mai 2009
113
Ami Terrien, pour toi en exclusivité, voici en résumé le genre de technique que j'utilise ...

$connecte_a_la_base = false;

function mysql_query_bis($sql){
global $connecte_a_la_base;
if(!$connecte_a_la_base){
mysql_connect( ...
mysql_select_db( ...
$connecte_a_la_base = true;
}
mysql_query($sql);
}

switch ($bidon) {
case 1 :
mysql_query_bis('SELECT champ1 FROM table1;');
break;
case 2 :
mysql_query_bis('SELECT champ1 FROM table1;');
mysql_query_bis('SELECT champ2 FROM table2;');
break;
default :
echo 'pas besoin de se connecter à la bdd';
break;
}

if($connecte_a_la_base)mysql_close();

interressant comme technique, va falloir que je fasse ça moi :p