Sessions php
Résolu
Fetide68
Messages postés
745
Date d'inscription
Statut
Membre
Dernière intervention
-
Fetide68 Messages postés 745 Date d'inscription Statut Membre Dernière intervention -
Fetide68 Messages postés 745 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
J'ai un problème avec des sessions : ce ne sont pas vraiment des sessions. elles marchent une seule fois et après, dès que je clique sur un lien, la session est détruite.
Tout se passe sur la page index. Et voici le code (simplifié) :
J'ai un problème avec des sessions : ce ne sont pas vraiment des sessions. elles marchent une seule fois et après, dès que je clique sur un lien, la session est détruite.
Tout se passe sur la page index. Et voici le code (simplifié) :
<?php include ('header.php'); // J'ouvre une session sir le mot de passe et le login ont été saisis : if ($_POST['login'] != "" && $_POST['login'] != "") { session_start(); $_SESSION['login'] = $_POST['login']; $_SESSION['password'] = $_POST['password']; } // Je teste ma session : if (isset($_SESSION['login']) && isset($_SESSION['password'])) { // conneexion à la base de données require ('connect.php'); // requête : $reponse = mysql_query ("SELECT * FROM bdd WHERE login = '".$_SESSION['login']."' AND password = '".$_SESSION['password']."'"); // Si l'utilisateur existe : if ($donnees = mysql_fetch_array($reponse)) { echo "C'est bon !"; } // Sinon : else { // Ici j'ai mon formulaire de connexion } // Déconnexion de la base de données. require ('deconnect.php'); } ?>
A voir également:
- Sessions php
- Easy php - Télécharger - Divers Web & Internet
- Expert php pinterest - Télécharger - Langages
- Retour a la ligne php - Forum Webmastering
- Alert php - Forum PHP
- Retour a la ligne php ✓ - Forum PHP
47 réponses
t pas oblige de modifier ton php ini, c'est mieux c'est sur mais suivant l'hergeur tu ne peut pas le toucher,heureusement y'a une solution toute simple:
tu peut en debut de tes pages mettre ceci
ini_set ( 'session.auto_start' , 1 );
cela va obliger ton serveur a demarrer les session a chaque fois que tu appelera cette page, bien sur si tu a plein de pages c'est sur qu'il vaut mieux configurer ton php.ini, alors dans ce cas place ces instructions dans un .htaccess
tu peut en debut de tes pages mettre ceci
ini_set ( 'session.auto_start' , 1 );
cela va obliger ton serveur a demarrer les session a chaque fois que tu appelera cette page, bien sur si tu a plein de pages c'est sur qu'il vaut mieux configurer ton php.ini, alors dans ce cas place ces instructions dans un .htaccess
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
(Suite)
Parce qu'avec ton code, ce n'est pas bon.
Il faut mettre ton session_start() en dehors du if, ce qui te permet de tester l'existence de $_SESSION['login'] (pour ta requête SQL).
Le problème surviendra après, si tu rafraîchis ta page, tu n'auras pas de session_start() puisque celui ci sera dans le if..
Parce qu'avec ton code, ce n'est pas bon.
Il faut mettre ton session_start() en dehors du if, ce qui te permet de tester l'existence de $_SESSION['login'] (pour ta requête SQL).
Le problème surviendra après, si tu rafraîchis ta page, tu n'auras pas de session_start() puisque celui ci sera dans le if..
Voilà ce que je ferais :
<?php session_start(); include ('header.php'); // J'ouvre une session sir le mot de passe et le login ont été saisis : if ($_POST['login'] != "" && $_POST['login'] != "") { // J'ai déplacé le session_start() du if. $_SESSION['login'] = $_POST['login']; $_SESSION['password'] = $_POST['password']; } // Je teste ma session : if (isset($_SESSION['login']) && isset($_SESSION['password'])) { // conneexion à la base de données require ('connect.php'); // requête : $reponse = mysql_query ("SELECT * FROM bdd WHERE login = '".$_SESSION['login']."' AND password = '".$_SESSION['password']."'"); // Si l'utilisateur existe : if ($donnees = mysql_fetch_array($reponse)) { echo "C'est bon !"; } // Sinon : else { // Ici j'ai mon formulaire de connexion } // Déconnexion de la base de données. require ('deconnect.php'); } ?>
Bonjour
Pendant que tu y étais, tu aurais pu corriger
Sortir le session_start() de ce if là ne sert pas à grand chose. Si le formulaire n'est pas rempli, les données de session sont perdues, mais ce ne serait pas un problème, au contraire, c'est plutôt un moyen d'effacer des traces de la session précédente.
Je pense que le problème se situe dans la page cible du lien
Pendant que tu y étais, tu aurais pu corriger
if ($_POST['login'] != "" && $_POST['password'] != "")
Sortir le session_start() de ce if là ne sert pas à grand chose. Si le formulaire n'est pas rempli, les données de session sont perdues, mais ce ne serait pas un problème, au contraire, c'est plutôt un moyen d'effacer des traces de la session précédente.
Je pense que le problème se situe dans la page cible du lien
Je pense qu'il faut sortir le session_start(); sinon lorsque la condition n'est pas remplie, c'est à dire quand il n'y a pas de poste, la session ne démarre pas.
De quelles pages cibles tu parles ?
C'est vrai qu'en fait à la place du "echo 'c'est bon'; j'ai mis ça :
De quelles pages cibles tu parles ?
C'est vrai qu'en fait à la place du "echo 'c'est bon'; j'ai mis ça :
if ($donnees = mysql_fetch_array($reponse)) { $page = $_GET['page']; if (isset($page)) { session_start(); include ($page.'.php'); } else { ?> <table> <tr> <td>Index</td> </tr> </table> <?php } }
si tu utilise les session session_start(); est a mettre obligatoirement en debut de code tout de suite apres <?PHP avant tout autre bribes de code , c'est tres tres important.
(a moins il me semble que le serveur soit configuré pour demarrer une session des que qu'une page php soit rencontrer pour ca voir le http.conf, par defaut c'est desactivé)
(a moins il me semble que le serveur soit configuré pour demarrer une session des que qu'une page php soit rencontrer pour ca voir le http.conf, par defaut c'est desactivé)
Si tu utilise les session session_start(); est a mettre obligatoirement en debut de code tout de suite apres <?PHP avant tout autre bribes de code , c'est tres tres important.
Non, ça n'a aucune importance. Il faut seulement qu'il soit mis avant l'envoi d'informations au client.
->Fetide68 : la cible dont je parle, c'est la page à laquelle aboutit le lien que sur lequel tu cliques : dès que je clique sur un lien, la session est détruite
Non, ça n'a aucune importance. Il faut seulement qu'il soit mis avant l'envoi d'informations au client.
->Fetide68 : la cible dont je parle, c'est la page à laquelle aboutit le lien que sur lequel tu cliques : dès que je clique sur un lien, la session est détruite
Ja saisis mal pourquoi la session est détruite à chaque fois que l'on clique sur un lien ? Normalement et par défaut, les sessions devraient durer au moins une demie heure ??
J'ai testé en local et en ligne, mais je n'ai pas de résultat... je ne pense pas que le fichier httpd.conf soit en cause alors, sinon je ne sais pas où se trouve l'information.
J'ai testé en local et en ligne, mais je n'ai pas de résultat... je ne pense pas que le fichier httpd.conf soit en cause alors, sinon je ne sais pas où se trouve l'information.
si tu demarre pas une session avec session_start() a chque nouvelle page c'est normal que la session soit perdue et ce n'est qu'une fois demarre que la session expire dans xx minutes..
faux.. Les pages de mon site demarre toutes avec un sessions start et la session n'est pas detruite :
exemple :
<?php
require("../passe/conf.php3");
$db_link = mysql_connect($sql_serveur,$sql_user,$sql_passwd);
$db = mysql_select_db("dbase",$db_link) or die ("Pas de base sous ce nom");
//connaitre le numero de la page appeler
$p=empty($_GET['p']) ? 1 : $_GET['p'];
//requetes
session_start() ;
$nom = $_POST['nom'];
$pass = $_POST['pass'];
$sql="select * from connexion where nom='$nom' and pass='$pass'";
$envoi=mysql_query($sql);
$nb=mysql_num_rows($envoi);
//si la session ne comporte pas encore de données ou quelles sont egales a 0
if( (($_SESSION['nom']=="")||($_SESSION['pass']=="")) || (($_SESSION['nom']=="0")||($_SESSION['pass']=="0")) )
{
// et seulement si la requete a renvoyé un resultat indiquant que le mot de pass et lidentifiant sont correct
if($nb==1)
{
//alors on rempli la session avec les bonne variable
$_SESSION['nom'] = $nom;
$_SESSION['pass'] = $pass;
}
//sinon rien
}
else
//si la session comporte deja un identifiant et un pass... alors on utilise cette session pour les autre requetes
{
$nom = $_SESSION['nom'];
$pass = $_SESSION['pass'];
}
$sql="select * from connexion where nom='$nom' and pass='$pass'";
$envoi=mysql_query($sql);
$nb=mysql_num_rows($envoi);
?>
exemple :
<?php
require("../passe/conf.php3");
$db_link = mysql_connect($sql_serveur,$sql_user,$sql_passwd);
$db = mysql_select_db("dbase",$db_link) or die ("Pas de base sous ce nom");
//connaitre le numero de la page appeler
$p=empty($_GET['p']) ? 1 : $_GET['p'];
//requetes
session_start() ;
$nom = $_POST['nom'];
$pass = $_POST['pass'];
$sql="select * from connexion where nom='$nom' and pass='$pass'";
$envoi=mysql_query($sql);
$nb=mysql_num_rows($envoi);
//si la session ne comporte pas encore de données ou quelles sont egales a 0
if( (($_SESSION['nom']=="")||($_SESSION['pass']=="")) || (($_SESSION['nom']=="0")||($_SESSION['pass']=="0")) )
{
// et seulement si la requete a renvoyé un resultat indiquant que le mot de pass et lidentifiant sont correct
if($nb==1)
{
//alors on rempli la session avec les bonne variable
$_SESSION['nom'] = $nom;
$_SESSION['pass'] = $pass;
}
//sinon rien
}
else
//si la session comporte deja un identifiant et un pass... alors on utilise cette session pour les autre requetes
{
$nom = $_SESSION['nom'];
$pass = $_SESSION['pass'];
}
$sql="select * from connexion where nom='$nom' and pass='$pass'";
$envoi=mysql_query($sql);
$nb=mysql_num_rows($envoi);
?>
heureusement qu'elle sont pas detruite ... sinon a quoi ça sert de demarrer une session lol !!!
je t'invite a potasser les sessions.
Une session a une durée de vie definie par le php.ini via session.gc_maxlifetime 1440 seconde par defaut(je crois)
tu peut parametrer les session en autostart en passant la directive session.auto_start = 1, par defaut c'est a 0
Donc si tu ne met pas session_start en haut de tes pages et que ta directive session.auto_start = 0 tes session ne demarrerons pas
je t'invite a potasser les sessions.
Une session a une durée de vie definie par le php.ini via session.gc_maxlifetime 1440 seconde par defaut(je crois)
tu peut parametrer les session en autostart en passant la directive session.auto_start = 1, par defaut c'est a 0
Donc si tu ne met pas session_start en haut de tes pages et que ta directive session.auto_start = 0 tes session ne demarrerons pas
Merci à tous...
And the winner is lewis34. J'ai changé le php.ini : session.auto_start = 1 au lieu de 0 et ça marche... en local, mais pas en ligne !
Je suis héberger chez 1and1.fr et je ne sais pas si je peux effectuer ce genre de manipulations.
And the winner is lewis34. J'ai changé le php.ini : session.auto_start = 1 au lieu de 0 et ça marche... en local, mais pas en ligne !
Je suis héberger chez 1and1.fr et je ne sais pas si je peux effectuer ce genre de manipulations.
tout dépend si tu as un serveur dédier ou mutualiser... dans le 1er cas, oui, dans l'autre(le plus courrant) non...
Donc il faut mettre session_start() ; dans les premieres ligne de ton index.php..
Si tu veux que l utilisateur s'authentifie obligatoirement, tu peux le rediriger sur la page d authentification avec quelque chose comme :
if (!isset($_Session['name'])){
header('location: MaPageAuthentification.php');
exit();
}
;)
Donc il faut mettre session_start() ; dans les premieres ligne de ton index.php..
Si tu veux que l utilisateur s'authentifie obligatoirement, tu peux le rediriger sur la page d authentification avec quelque chose comme :
if (!isset($_Session['name'])){
header('location: MaPageAuthentification.php');
exit();
}
;)