2010-01-17 7 views
4

Est-il préférable de stocker toutes les informations des utilisateurs dans les cookies de session comme celui-ci lors de la connexion? Au lieu d'utiliser beaucoup de querysStockez tous les utilisateurs des informations sur la connexion

$_SESSION['id'] = mysql_result($result, 0, 'id'); 
$_SESSION['name'] = mysql_result($result, 0, 'name'); 
$_SESSION['email'] = mysql_result($result, 0, 'email'); 
$_SESSION['ip'] = mysql_result($result, 0, 'regip'); 
$_SESSION['groupid'] = mysql_result($result, 0, 'group_id'); 
$_SESSION['style'] = mysql_result($result, 0, 'style'); 

Ou peut-être juste ID de magasin en session puis interroger sur toute la page:

select * from users where id = $_SESSION['id'] 
+0

Aussi peut vouloir regarder dans memcache, alors vous pouvez stocker en mémoire – JasonDavis

Répondre

2

Si vous allez à les utiliser beaucoup, bien sûr. Bien que je ferais attention à stocker tous les des données des utilisateurs dans la session. Seulement ce qui est nécessaire. Gardez à l'esprit que les requêtes bien écrites ne coûtent pas cher sur les ressources. N'essayez pas d'éviter de vous connecter à la base de données, assurez-vous simplement que lorsque vous le faites, vous le faites bien.

Vous pouvez tester votre consommation de mémoire si vous le souhaitez en utilisant memory_get_usage(). Mais notez que les données de session sont stockées dans un fichier plat sur le système lui-même:

session_start(); 
echo memory_get_usage(); // 87744 
$_SESSION["user"] = array(
    "name" => "Jonathan Sampson", 
    "id"  => 54680, 
    "groupID" => 0285, 
    "email" => "[email protected]", 
    "style" => "background-color:#333;color:#f1f1f1" 
); 
echo memory_get_usage(); // 88344 

Alors vous pouvez voir que c'est vraiment très trivial pour stocker cette quantité de données.

Voir aussi:Cache data in PHP SESSION, or query from db each time?

+0

Je suis d'accord. En général, je sauvegarde simplement le 'UserID', et je l'utilise (+ autres variables environnementales) pour obtenir les détails de l'utilisateur de la base de données. –

+3

+1: À mon avis, la seule information qui devrait être un candidat pour les sessions est celle qui est requise pour chaque page. Sinon, revenez à la base de données si nécessaire. – NotMe

+1

Mais que se passe-t-il si l'utilisateur change son adresse e-mail? Le développeur doit se souvenir de modifier la session var. Si vous n'enregistrez que l'ID utilisateur mais récupérez le reste de la base de données à chaque fois, vous n'avez pas à vous en préoccuper. –

2

Je créerais un (salé) hachage pour chaque utilisateur, enregistré dans la db:

$salt = 'asdjnvdskflds'; 
$hash = md5($salt . $email); 

stocker ensuite le hachage de la session. De cette façon, vous pouvez appeler les données de l'utilisateur à chaque fois. Cela a également l'avantage de ne pas avoir à mettre à jour la session si l'utilisateur change certaines de ses données.

Questions connexes