Sessions php
Résolu/Fermé
Fetide68
Messages postés
746
Date d'inscription
dimanche 4 janvier 2009
Statut
Membre
Dernière intervention
16 septembre 2024
-
24 juil. 2009 à 11:40
Fetide68 Messages postés 746 Date d'inscription dimanche 4 janvier 2009 Statut Membre Dernière intervention 16 septembre 2024 - 29 juil. 2009 à 15:19
Fetide68 Messages postés 746 Date d'inscription dimanche 4 janvier 2009 Statut Membre Dernière intervention 16 septembre 2024 - 29 juil. 2009 à 15:19
47 réponses
lewis34
Messages postés
2557
Date d'inscription
samedi 21 juillet 2007
Statut
Membre
Dernière intervention
30 mai 2015
352
27 juil. 2009 à 11:52
27 juil. 2009 à 11:52
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
Fetide68
Messages postés
746
Date d'inscription
dimanche 4 janvier 2009
Statut
Membre
Dernière intervention
16 septembre 2024
32
24 juil. 2009 à 14:12
24 juil. 2009 à 14:12
J'ai mis le session_start(); partout, ça ne marche pas !
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Fetide68
Messages postés
746
Date d'inscription
dimanche 4 janvier 2009
Statut
Membre
Dernière intervention
16 septembre 2024
32
24 juil. 2009 à 14:22
24 juil. 2009 à 14:22
Oui je viens de remarqué ça, j'ai changé, mais j'ai toujours le problème.
(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
Fetide68
Messages postés
746
Date d'inscription
dimanche 4 janvier 2009
Statut
Membre
Dernière intervention
16 septembre 2024
32
24 juil. 2009 à 14:34
24 juil. 2009 à 14:34
Je désespère, je repasse mes scripts en boucle, mais ça ne change rien !
Fetide68
Messages postés
746
Date d'inscription
dimanche 4 janvier 2009
Statut
Membre
Dernière intervention
16 septembre 2024
32
24 juil. 2009 à 14:49
24 juil. 2009 à 14:49
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 } }
lewis34
Messages postés
2557
Date d'inscription
samedi 21 juillet 2007
Statut
Membre
Dernière intervention
30 mai 2015
352
24 juil. 2009 à 14:51
24 juil. 2009 à 14:51
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
lewis34
Messages postés
2557
Date d'inscription
samedi 21 juillet 2007
Statut
Membre
Dernière intervention
30 mai 2015
352
24 juil. 2009 à 15:35
24 juil. 2009 à 15:35
Non, ça n'a aucune importance. Il faut seulement qu'il soit mis avant l'envoi d'informations au client.
j'ai mal formulé mais c'est ce que je voulais dire... ;-)
j'ai mal formulé mais c'est ce que je voulais dire... ;-)
Fetide68
Messages postés
746
Date d'inscription
dimanche 4 janvier 2009
Statut
Membre
Dernière intervention
16 septembre 2024
32
25 juil. 2009 à 12:39
25 juil. 2009 à 12:39
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.
lewis34
Messages postés
2557
Date d'inscription
samedi 21 juillet 2007
Statut
Membre
Dernière intervention
30 mai 2015
352
25 juil. 2009 à 13:34
25 juil. 2009 à 13:34
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..
sunburn23
Messages postés
33
Date d'inscription
samedi 25 juillet 2009
Statut
Membre
Dernière intervention
25 juillet 2009
25 juil. 2009 à 14:05
25 juil. 2009 à 14:05
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);
?>
lewis34
Messages postés
2557
Date d'inscription
samedi 21 juillet 2007
Statut
Membre
Dernière intervention
30 mai 2015
352
25 juil. 2009 à 16:08
25 juil. 2009 à 16:08
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
Fetide68
Messages postés
746
Date d'inscription
dimanche 4 janvier 2009
Statut
Membre
Dernière intervention
16 septembre 2024
32
27 juil. 2009 à 09:46
27 juil. 2009 à 09:46
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.
jjsteing
Messages postés
1670
Date d'inscription
vendredi 11 mai 2007
Statut
Contributeur
Dernière intervention
21 mai 2012
181
27 juil. 2009 à 09:51
27 juil. 2009 à 09:51
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();
}
;)
Fetide68
Messages postés
746
Date d'inscription
dimanche 4 janvier 2009
Statut
Membre
Dernière intervention
16 septembre 2024
32
27 juil. 2009 à 12:17
27 juil. 2009 à 12:17
Top cool ! Merci, je mets le post en résolu avec plaisir. Je pense que d'autres y trouveront leur compte...
Fetide68
Messages postés
746
Date d'inscription
dimanche 4 janvier 2009
Statut
Membre
Dernière intervention
16 septembre 2024
32
27 juil. 2009 à 18:21
27 juil. 2009 à 18:21
Ca marche très bien en local, mais pas sur 1and1...