2008-12-11 9 views
8

Je crée une application web php qui stocke des informations spécifiques à l'utilisateur qui ne sont pas partagées avec d'autres utilisateurs.

Serait-ce une bonne idée de stocker certaines de ces informations dans la variable $ _SESSION pour la mise en cache? Par exemple: mettez en cache une liste de catégories que l'utilisateur a créées pour son compte.

Répondre

10

Ce serait une utilisation appropriée du mécanisme de session en tant que vous gardez cela à l'esprit:

  • session ne persiste pas pour une période de temps indéfinie.
  • Lorsque vous extrayez de la session, assurez-vous que vous avez réellement obtenu un résultat (ASP.NET renverra NULL si la session a expiré/effacé)
  • Les redémarrages du serveur peuvent effacer le cache de session.
  • Pour des raisons de commodité, pas de performance. Pour la mise en cache haute performance, choisissez un mécanisme approprié (c.-à-memcached)

On obtient une bonne utilisation serait comme celui-ci (cookies éther ou session):

  • journaux utilisateur dans
  • Préférences de vente (couleur d'arrière-plan, les 10 derniers enregistrements examinés, catégories) en session/cookie.
  • Lors du rendu d'une page, reportez-vous aux valeurs Session/Cookie (en vérifiant qu'elles sont des valeurs valides et non nulles).

Choses à ne pas faire dans un cookie

  • Ne pas stocker quoi que ce soit sensible (session d'utilisation).
  • Une valeur de cookie ne doit pas vous accorder/refuser l'accès à quelque chose (utiliser une session).
  • Les erreurs d'interruption, en supposant que les indicateurs et les chaînes peuvent ne pas correspondre à ce que vous attendez, peuvent manquer, peuvent être modifiés pendant le transport.

Je suis sûr qu'il y a d'autres choses à considérer aussi, mais c'est juste au dessus de ma tête ici.

+0

J'ai lu quelque part que memcached ne valait pas la peine pour une récupération de données plus faible. Est-ce plus rapide que l'utilisation de la session? – menko

+0

memcached est l'endroit où vous stockez des éléments d'information afin que vous n'ayez pas à continuer d'appuyer sur un magasin de données. C'est pour les sites Web à très fort trafic et l'une des choses que vous commencez à implémenter après avoir étendu votre application et vos serveurs db. –

+0

memcached est beaucoup plus rapide qu'une base de données, mais toujours plus lent que l'accès $ _SESSION basé sur un fichier car vous devez faire des requêtes réseau au lieu d'accéder au disque local. La raison de l'utiliser à la place est la cohérence entre plusieurs serveurs. –

4

Cela pourrait bien fonctionner pour des quantités relativement faibles de données, mais vous devrez prendre certaines choses en considération:

  1. $ _SESSION est stocké quelque part entre les demandes, le fichier sur le disque ou la base de données ou autre selon Ce que vous choisissez d'utiliser (par défaut dans le fichier)
  2. $ _SESSION est local pour un seul utilisateur sur une seule machine.
  3. Les sessions ont un TTL (durée de vie), elles disparaissent après un certain laps de temps (que vous contrôlez)
  4. Dans certaines circonstances, les sessions peuvent bloquer (rarement un problème, mais je l'ai rencontré en streaming flash Si plusieurs utilisateurs doivent accéder aux données que vous voulez mettre en mémoire cache, il est préférable de les mettre en cache séparément.
2

Si vous souhaitez uniquement que ces données soient disponibles pendant leur session, alors oui. Si vous le souhaitez disponible demain ou dans 4 heures, vous devez l'enregistrer dans une base de données.Techniquement, vous pouvez modifier les sessions pour avoir une durée de vie très longue, mais se rendre compte si elles utilisent un autre ordinateur, un navigateur différent ou vider leurs cookies, ils perdront le lien vers leur session, donc quelque chose de sérieux, vous devriez créer un type du compte utilisateur dans votre application, liez la session à leur compte et enregistrez les données dans un lieu de perméat.

Questions connexes