2012-12-06 8 views
0

Quel est le meilleur moyen pour les POO, les SESSIONS et les comptes utilisateur de suivre les informations utilisateur à utiliser sur un site Web. (par exemple Stack Overflow, Facebook, Google, YouTube, etc.)Comment conserver les données utilisateur

Je pensais qu'une fois qu'un utilisateur se connecte, vous pouvez affecter toutes les informations à la matrice de session. Pour un exemple:

$ _SESSION ['ID_utilisateur'], $ _SESSION ['rôles'].

Puis, en POO que vous pourriez faire:

$ foo-> GetUserID(), $ foo-> getAge ($ user_id), etc.

Je suppose que ma question est Quel est le meilleur moyen de gérer les informations à utiliser pour le contenu dynamique sur une page Web basée sur l'utilisateur? (ex: Profil d'utilisateur, âge, date d'adhésion, etc.). Dois-je seulement stocker une variable SESSION de l'id_utilisateur, puis utiliser l'id_utilisateur pour récupérer les informations que je veux?

+0

Si l'information ne change pas pendant toute la session, interrogez-la une fois et sauvegardez-la. Sinon, vous risquez d'être vicié et d'avoir des valeurs contradictoires. – ethrbunny

+0

Je stockerais seulement l'user_id dans la session et récupèrerais tout le reste de la base de données. Si vous demandez quelque chose qui est OOP, vous devriez essayer une doctrine semblable à celle de l'orme. –

Répondre

3

L'un des principaux avantages de l'utilisation des principes OOP est que tout devient un objet, avec ses propres propriétés. En supposant que vous ayez déjà géré le processus de connexion, vous feriez mieux d'utiliser leur identifiant session_id() comme identificateur, de rechercher leur ID utilisateur et de renvoyer un nouvel objet à partir d'une classe User. Voici un exemple:

class User 
{ 
    public $forename; 
    public $surname; 
    public $google; 
    ... 

    function __construct($id) 
    { 
     // Get the record from the DB and assign thevalues as follows: 
     $this->forename = $dbobject->forename; 
     $this->surname = $dbobject->surname; 
     $this->google = $dbobject->google; 
    } 
} 

Vous devez ensuite créer l'objet utilisateur, et vous pouvez l'assigner comme utilisateur actuellement connecté:

$logged_in = new User($id); 

Par la suite, peut être consulté chaque propriété à l'aide $logged_in->forename.

+0

Prenez le système de SO pour un exemple. Comment vont-ils en utilisant OOP pour récupérer les données de l'utilisateur. Les exemples sont la réputation, les informations de profil, les questions connexes, les publications et les réponses. Utilisez-vous simplement l'identifiant de session stocké pour que l'identifiant de l'utilisateur récupère les informations associées? –

+1

Oui. Tout sur un utilisateur doit être stocké dans une base de données. Une fois qu'un utilisateur se connecte, vous mappez son ID de session à l'ID utilisateur correspondant. Ensuite, vous pouvez exécuter le constructeur comme je l'ai montré, et passer à travers ce dont vous avez besoin. – BenM

+0

Si vous le devez, vous pouvez stocker une version sérialisée de l'objet dans '$ _SESSION ['user']' mais cela annule la raison de l'utilisation des sessions.la façon dont BenM a montré est la meilleure façon de le faire, instancier quand l'ID existe, si vous allez utiliser la classe – pocesar

0

Vous voudriez minimiser les données que vous stockez dans $ _SESSION []. Je ne suis pas sûr si vous pouvez faire des classes ou des structures en PHP, mais vous voulez probablement créer un objet de l'utilisateur qui a les propriétés nom d'utilisateur, ID utilisateur, rôles (tableau), au minimum. Vous pouvez ajouter d'autres informations que vous savez seront affichées sur chaque page. De cette façon, vous n'auriez qu'un seul élément dans le $ _SESSION [] pour l'utilisateur.

Tant que l'utilisateur est connecté, vous avez toujours $ _SESSION ['User'], et vous voudrez probablement utiliser les informations de l'utilisateur pour déterminer les données à afficher (entrées de blog, vidéos postées, etc.), et quelles sections de la page afficher/masquer en fonction des rôles de cet utilisateur.

Questions connexes