Centraliser session pour utilisateur et ses fonctionnalitées ? - Apprendre-PHP.com

Rechercher
Boutique en ligne, solution e-commerce, script PHP et PERL : RAYNETTE

centraliser session pour utilisateur et ses...

Par Vini -  1 reponse -  Le 15/03/2009 -  Flux RSS - 

Hello World !

je sais pas si mon titre veux dire grand chose mais bon j'ai pas trouver mieux lol !

voici mon cas j'ai créer les classes :

  •  User 
  • SessionStorage
  • Shopping Cart
  • UserTracker

et un sytème multilangue avec des fichiers de constantes !

je me suis basé sur les astuces que tu m'as données tout au long de ma petite application

que je monte au fur et à mesure !

 mais sans plus tarder voici un peu de code :D

 dans mon controller:

Controller
$registry->router = new router($registry);
$lang = $registry->router->getCulture();
 
 
/*** Set the culture of user ***/
define('USER_DEFAULT_CULTURE', 'FR');
User::setAvailableCultures(array('DE','BE','EN','FR','IT','PT'));
 
$registry->user = new User(new Session());
$user = $registry->user;
 
if(is_null($user->getCulture()))
{
$user->setCulture(USER_DEFAULT_CULTURE);
}
 
 
/*** Changement de culture ***/
if(!empty($lang))
{
try
{
$user->setCulture($lang);
}
catch(Exception $e)
{
throw $e;
}
}
 
require( __SITE_PATH . '/application/common/' . $user->getCulture() .'.php');
 
 
/*** Track bisitor ***/
$user->setUserTracker(new TrackUser());
$user->addUserVisitor();

la ou je bloque c'est comment utiliser l'objet SessionStorage dans les class utiliées par User

sachant que je fais $user = new User(new Session);

 et j'en ai besoin dans ma class de UserTracker qui me permet de suivre le visiteur (User) et donc le tracker

pour des besoins de statistics !

exemple de mon code:

UserTracker
public function addVisitor()
{
try
{
$sql = 'INSERT INTO ' . self::T_STAT_NAV . ' ('
.self::F_ADDR.', '
.self::F_NAME_PAGE.', '
.self::F_DETAIL_PAGE.') VALUES (\''
.$_SERVER['REMOTE_ADDR'].'\', \''.$_SERVER['SCRIPT_NAME'].'\', \''
.$_SERVER['QUERY_STRING'].'\')';
 
$pdo = self::getConnection();
$pdo->beginTransaction();
$statement = $pdo->prepare($sql);
$statement->execute();
 
// Get the last id insert
$last = $pdo->lastInsertId();
$pdo->commit();
 
 
$sql = 'SELECT MAX('.self::F_NUM_VISITOR.')
AS '.self::F_COMPTEUR.'
FROM '.self::T_STAT_NAV.' ';
 
$sql = $pdo->prepare($sql);
$sql->execute();
$row = $sql->fetch(PDO::FETCH_OBJ);
$counter = $row->counter;
 
// if isset counter then $counter else $counter += 1
echo $counter = !isset($counter) ? $counter = 1 : $counter++;
 
$sql = 'UPDATE '.self::T_STAT_NAV.'
SET '.self::F_NUM_VISITOR.' = \''. $counter .'\'
WHERE ' .self::F_ID.' = ' . $last;
 
$pdo->beginTransaction();
$qid = $pdo->prepare($sql);
$qid->execute();
$pdo->commit();
 
$_SESSION['follow'] = true;
$_SESSION['numUser'] = $counter;
$_SESSION['url_completed'] = $_SERVER['SCRIPT_NAME'].'?'.$_SERVER['QUERY_STRING'];
 
}

je précise au passage que je me suis inspirer de phpsolution("Christophe Villeneuve") qui propose le script de tracking que je trouve pour ma part pas mal du tout et je le réadapte en objet !

donc dans ce cas je dois utilisé la session pour que le server ce souviens de l'utilisateur  !

j'ai pensé dans cette classe à faire des setters et des getters pour les variable de sessions qui avec l'objet $user j'aurais plus cas set la session !

mais est bon ? ca me parait peut etre un peut bidouiller et il y'a peut etre mieux !

 

Merci d'avance pour votre aides !

 

Vini += 1 :D

 

 

 

 

 

 

 

Réponses apportées à cette discussion

Par Vini -  Le 17/04/2009 - 

Bon ben je vois toujours pas comment géré ce truc au mieux !

 dois je créer un objet session dans la class tracker sachant que je fais new Session() en parametre 

de User !

 ou bien je dois utilisé des méthode static faire du hydrate !

 

bref je vois pas trop ! je galère comme d'hab !

 

 

Ajouter une réponse à la discussion

Seuls les membres loggués sont autorisés à poster dans les forums !