variable de session stoké dans une base de donnée
Bonjour,
Je entrain de développer un site web et j'ai quelque soucis avec les sessions.
Pour créer mes session j'utilise la technique avec les base de données.
J'utilise la classe suivante :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97
|
<?php
/***************************************************************************
* description: gestion des sessions par la bdd
* -------------------
* copyright : F_D_V copyright creative commmon cc by-no :
* pas d'utilisation commerciale autorisée, droit de modification, l'auteur doit être cité
* pour plus d'information http://creativecommons.org/licenses/by-nc/2.0/fr/
****************************************************************************/
class Session
{
public $session_time = 7200;//2 heures
public $session = array();
public function __construct($sql_host, $sql_user, $sql_password, $sql_db)
{
$this->host = $sql_host;
$this->user = $sql_user;
$this->password = $sql_password;
$this->dba = $sql_db;
}
public function open ()//pour l'ouverture
{
$this->connect = mysql_connect($this->host, $this->user, $this->password,1);//on se connecte a la bdd
$bdd = mysql_select_db($this->dba,$this->connect);//on sélectionne la base de données
$this->gc();//on appelle la fonction gc
return $bdd;//true ou false selon la réussite ou non de la connexion à la bdd
}
public function read ($sid)//lecture
{
$sid = mysql_real_escape_string($sid,$this->connect);
$sql = "SELECT sess_datas FROM sess_table
WHERE sess_id = '$sid' ";
$query = mysql_query($sql,$this->connect) or exit(mysql_error());
$data = mysql_fetch_array($query);
if(empty($data)) return FALSE;
else return $data['sess_datas'];//on retourne la valeur de sess_datas
}
public function write ($sid, $data)//écriture
{
$expire = intval(time() + $this->session_time);//calcul de l'expiration de la session
$data = mysql_real_escape_string($data,$this->connect);//si on veut stocker du code sql
$sql = "SELECT COUNT(sess_id) AS total
FROM SESS_TABLE
WHERE sess_id = '$sid' ";
$query = mysql_query($sql,$this->connect) or exit(mysql_error());
$return = mysql_fetch_array($query);
if($return['total'] == 0)//si la session n'existe pas encore
{
$sql = "INSERT INTO SESS_TABLE
VALUES('$sid','$data','$expire')";//alors on la crée
}
else//sinon
{
$sql = "UPDATE SESS_TABLE
SET sess_datas = '$data',
sess_expire = '$expire'
WHERE sess_id = '$sid' ";//on la modifie
}
$query = mysql_query($sql,$this->connect) or exit(mysql_error());
return $query;
}
public function close()//fermeture
{
mysql_close($this->connect);//on ferme la bdd
}
public function destroy ($sid)//destruction
{
$sql = "DELETE FROM SESS_TABLE WHERE sess_id = '$sid' ";//on supprime la session de la bdd
$query = mysql_query($sql,$this->connect) or exit(mysql_error());
return $query;
}
public function gc ()//nettoyage
{
$sql = "DELETE FROM sess_table
WHERE sess_expire < ".time(); //on supprime les vieilles sessions
$query = mysql_query($sql,$this->connect) or exit(mysql_error());
return $query;
}
}//fin de la classe
?> |
et dans mon fichier php j'utilise le code suivant :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
|
$session = new Session($hostname_connection, $username_connection, $password_connection, $database_connection);//on déclare la classe
session_set_save_handler(array($session, 'open'),
array($session, 'close'),
array($session, 'read'),
array($session, 'write'),
array($session, 'destroy'),
array($session, 'gc'));//on précise les méthodes à employer pour les sessions
session_start();
$_SESSION['idclient']=$_POST['login']; |
Jusque la ca marche tres bien mon histoire.
J'en arrive au pb
Je voudrais recuperer l'idclient sur une autre page et le navigateur me dit que ma variable n'existe pas.
J'essaye avec ce code
Code:
1 2 3 4 5 6
|
<?php
require_once("session.php");
session_start();
echo $_SESSION['idclient'];
?> |
Avez vous une idée ?
Merci d'avance