[PHP] Problème de session
Résolu
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.
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.
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
-
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. -
sesion_start faut le mettre sur toutes les pages ayant besoin d'une session sinon ça marche plus quand tu passe a une autre page , car à priori dans sql_class y'en a pas de session_start, donc c'est la qu'elle se tue ta session
-
Dans mon require_once
sa m'évite de le redéclarer par la suite. -
avant ou apres ton require_once '_common.php'; ?
-
sa vient pas du session_start(); il est bien déclarer
-
et a tu mis un session_start ?
-
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 -
tu l'appelle comment ta page ?
-
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 ? -
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.. -
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 soitrequire_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... -
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 -
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 donnerequire_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() -
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';
-
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... -
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... -
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.
-
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'])); -
Malheuresement oui ... lol
Peut être une info qui peut servir : Hebergement 1&1
J'ai déjà renomer mes variables session et toujours rien. -
Tu n'as pas loupé d'éventuels messages d'erreur? error_reporting(E_ALL);?
- 1
- 2
Suivant