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
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é) :

<?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:

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
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
1
Il me semble qu'il faut répeter sur les pages suivantes :
session_start();
sinon on perd la session
0
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
J'ai mis le session_start(); partout, ça ne marche pas !
0
Ton session_start(); tu l'as bien mis en dehors de toute condition (en dehors d'un "if").
0

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
Oui je viens de remarqué ça, j'ai changé, mais j'ai toujours le problème.
0
(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..
0
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');
	}
?> 

0
Bonjour

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
0
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
Je désespère, je repasse mes scripts en boucle, mais ça ne change rien !
0
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
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 :

		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
			}
		}	
0
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
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é)
0
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
0
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
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... ;-)
0
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
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.
0
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
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..
0
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
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);

?>
0
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
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
0
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
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.
0
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
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();
}

;)
0
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
Top cool ! Merci, je mets le post en résolu avec plaisir. Je pense que d'autres y trouveront leur compte...
0
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
Ca marche très bien en local, mais pas sur 1and1...
0