[PHP] Problème de session

Résolu/Fermé
Blue project - 18 oct. 2009 à 20:33
 Blue project - 19 oct. 2009 à 17:19
Bonjour,

Suite à une grosse prise de tête, j'aimerai bien savoir d'ou vien mon problème...

J'utilise PHP5 objet avec des Sessions pour garder en memoire des objets. Mais dès que je change de page, ces donnée se remette à zéro.

	require_once UTIL_PATH.'/sql.class.php';
	require_once CLASS_PATH.'/compte.class.php';

	session_start();

	// Instance de Sql
	if (!isset ($_SESSION['sql']))
		$_SESSION['sql'] = new Sql();

	// Instance de compte
	if(!isset ($_SESSION['compte']))
		$_SESSION['compte'] = new Compte();

	print_r($_SESSION['sql']);

La première fois, Sql est bien instancier, au changement de page, il passe #ressource ID 12 en 0 ? c'est la que je comprend plus.
Merci pour toute aide à ce sujet.

23 réponses

Blue project
19 oct. 2009 à 17:19
Je vien de trouvé, pour ceux qui recherche, les données de type ressource ne peuvent pas être stocker dans des variable session chez 1&1, il faut utiliser un
mysql_pconnect
pour récuperer l'ancienne connection...

Bon ce n'est pas tout mais j'ai encore pas mal de taf... maudit 1&1.
1
gigaga Messages postés 2346 Date d'inscription vendredi 20 juin 2008 Statut Membre Dernière intervention 22 août 2014 301
18 oct. 2009 à 20:38
Vérifie que le répertoire des sessions sur le serveur existe bien et est accessible en écriture et lecture.
Le répertoire est spécifié par la variable session.save_path dans le fichier the php.ini.
0
Blue project
18 oct. 2009 à 20:46
Les sessions marchent, car quand je fait $_SESSION['test'] = "toto"; et que je change de page, elle reste en mémoire.

sa m'affiche sa la première fois
Sql Object ( [conn:private] => Resource id #12 )

puis
Sql Object ( [conn:private] => 0 )
la seconde fois et les suivante... là je planche serieux sur ce problème
0
lewis34 Messages postés 2557 Date d'inscription samedi 21 juillet 2007 Statut Membre Dernière intervention 30 mai 2015 352
18 oct. 2009 à 20:50
une reponse toute bete a tu bien mis ton session_start sur toute tes pages ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
gigaga Messages postés 2346 Date d'inscription vendredi 20 juin 2008 Statut Membre Dernière intervention 22 août 2014 301
18 oct. 2009 à 20:52
Tu n'as pas loupé d'éventuels messages d'erreur? error_reporting(E_ALL);?
0
Blue project
18 oct. 2009 à 20:53
Malheuresement oui ... lol

Peut être une info qui peut servir : Hebergement 1&1

J'ai déjà renomer mes variables session et toujours rien.
0
gigaga Messages postés 2346 Date d'inscription vendredi 20 juin 2008 Statut Membre Dernière intervention 22 août 2014 301
18 oct. 2009 à 20:55
En fait, je te conseillerai de serialiser ton objet avant de mettre en session :

$_SESSION['sql'] = serialize(new Sql());

et que tu récupère en déserialisant :

print_r(unserialize($_SESSION['sql']));
0
lewis34 Messages postés 2557 Date d'inscription samedi 21 juillet 2007 Statut Membre Dernière intervention 30 mai 2015 352
18 oct. 2009 à 21:01
pour moi c'est qu'a partir d'un moment tu n'a plus de session (session_start absent ) regarde au niveau de tes includes.
0
Blue project
18 oct. 2009 à 21:01
J'ai test la serialisation mais sa ne vien pas de la, je perd même mon Sql lors de la première connexion au site.
Sql Object ( [conn:private] => 0 )

Sujet à s'arracher les cheveux...
0
Blue project
18 oct. 2009 à 21:07
je vien de test
	require_once UTIL_PATH.'/sql.class.php';
	require_once CLASS_PATH.'/compte.class.php';
	session_start();

	
	// Instance de Sql
	if (!isset ($_SESSION['test']))
		$_SESSION['test'] = "toto";
	
	// Instance de Sql
	if (!isset ($_SESSION['session_sql']))
		$_SESSION['session_sql'] = new Sql();

	// Instance de compte
	if(!isset ($_SESSION['compte']))
			$_SESSION['compte'] = new Compte();
	
	print_r($_SESSION['session_sql']);
	echo "<br/>";
	print_r($_SESSION['test']);


print_r($_SESSION['test']); s'affiche bien
mais print_r($_SESSION['session_sql']); toujours pas lors d'un changement, rechargement de page...
0
lewis34 Messages postés 2557 Date d'inscription samedi 21 juillet 2007 Statut Membre Dernière intervention 30 mai 2015 352
18 oct. 2009 à 21:14
j'en revien avec mon session start
tu met

require_once UTIL_PATH.'/sql.class.php';
	require_once CLASS_PATH.'/compte.class.php';
	session_start();

essaye comme ca
session_start();
require_once UTIL_PATH.'/sql.class.php';
	require_once CLASS_PATH.'/compte.class.php';

0
Blue project
18 oct. 2009 à 21:21
Même pas la peine de tester ce genre de chose, je vais me taper une erreur car php ne connait pas encore les classes pour lesquelle je tente de récupperer les informations (__PHP_Incomplete_Class Object ( [__PHP_Incomplete_Class_Name] => Sql [conn:private] => 0 )). Voila pour te le prouver ^^.

J'ai tester de commenter tout le reste de mon code sauf cette partie et toujour rien.
sa donne
	require_once '/homepages/xx/xxxxxxxx/htdocs/xxxxx/utilitaire/sql.class.php';
	session_start();
	
	if (!isset ($_SESSION['session_sql']))
		$_SESSION['session_sql'] = new Sql();

	print_r($_SESSION['session_sql']);

Les xxx sont déclarer autrement => cf real_path()
0
lewis34 Messages postés 2557 Date d'inscription samedi 21 juillet 2007 Statut Membre Dernière intervention 30 mai 2015 352
18 oct. 2009 à 21:29
oula c'est pas banal ton pb..
donc resumons tu appelle tes caless avec
UTIL_PATH.'/sql.class.php' et CLASS_PATH.'/compte.class.php'

et apres tu n'a plus de session si j'ai bien compris.

c'est quoi exactement le script d'une de tes pages qui perd la session
0
Blue project
18 oct. 2009 à 21:40
Sur mon site j'ai adopter une arborescence assé pousser UTIL_PATH pour les classes utilitaire (celle qui n'ont pas besoin de connection à SQL sauf sql.class.php .
Exemple mail.class.php qui vérifie synthaxe, validité de l'adresse mail )
et CLASS_PATH pour les classes normales nécessitant une alteration de la BDD
Le script étant ceux que j'ai déjà mis sur le ce site soit
	require_once '/homepages/15/d283516940/htdocs/itolome/utilitaire/sql.class.php';
	session_start();
	
	if (!isset ($_SESSION['session_sql']))
		$_SESSION['session_sql'] = new Sql();

	print_r($_SESSION['session_sql']);

rien de plus, rien de moin.

pour le fichier sql.class.php
<?php
class Sql{

	private $conn;

	/** Constructeur par défaut */
	public function __construct(){
		$this->conn = @mysql_connect(HOST, USER, PWD)
			OR DIE ("Impossible de se connecter.");

		@mysql_select_db (DB_NAME, $this->conn)
			OR DIE ("Base innexistante.");
	}
	
	/** Représentation toString de l'objet */
	public function __toString(){ return "".$this->conn; }

	/** Interroge la BDD */
	public function query($requete){
		$res = @mysql_query ($requete, $this->conn);
			//OR DIE ("Une opération inconnu vien de se produire.");
		return $res;
    }

    /** Retourne sous forme de tableau la requête */
    public function fetch_array($result){
		$ret = @mysql_fetch_array($result, MYSQL_ASSOC)
			OR DIE ("Une opération inconnu vien de se produire.");
		return $ret;
    }

	/** Retourne l'ID de la dernière insertion SQL */
	public function get_insert_id(){
		$ret = @mysql_insert_id($this->conn)
			OR DIE ("Une opération inconnu vien de se produire.");
		return $ret;
	}

	/** Renvoi le nombre de tuple de la requête */
	public function get_num_rows($result){
		$ret = @mysql_num_rows($result)
			OR DIE ("Une opération inconnu vien de se produire.");
		return $ret;
	}
}
?>

Rien de plus simple...
0
lewis34 Messages postés 2557 Date d'inscription samedi 21 juillet 2007 Statut Membre Dernière intervention 30 mai 2015 352
18 oct. 2009 à 21:50
c'est pas le script de tes pages classes qu'il faut voir c'est celle des pages suivantes
mais en tout etet de cause je vois que ton session_start est toujours apres ton require_once et que dans sql.class.php y'en a pas de demarrage de session..
0
Blue project
18 oct. 2009 à 21:55
J'ai essayé autre chose, mais toujour le même soucie.

	$test = @mysql_connect(HOST, USER, PWD);
	@mysql_select_db (DB_NAME, $test);
	
	if (!isset ($_SESSION['test_sql']))
		$_SESSION['test_sql'] = $test;

	print_r($_SESSION['test_sql']);

affiche "Resource id #3" au premier appel de page
affiche ensuite "0" ... sa vien du Sql mais pourquoi ?
0
lewis34 Messages postés 2557 Date d'inscription samedi 21 juillet 2007 Statut Membre Dernière intervention 30 mai 2015 352
18 oct. 2009 à 22:00
tu l'appelle comment ta page ?
0
Blue project
18 oct. 2009 à 22:03
http://www.xxxxxxxxx.fr/index.php

dans l'index.php il y a juste require_once '_common.php';
qui contient le script cité plus haut.

le fichier s'appele _common.php
0
lewis34 Messages postés 2557 Date d'inscription samedi 21 juillet 2007 Statut Membre Dernière intervention 30 mai 2015 352
18 oct. 2009 à 22:04
et a tu mis un session_start ?
0
Blue project
18 oct. 2009 à 22:06
sa vient pas du session_start(); il est bien déclarer
0