web-dev-qa-db-fra.com

Cache VS Session VS cookies?

Que faire et ne pas faire à propos des cookies Cache VS Session VS?

Par exemple:
J'utilise beaucoup les variables de session et des problèmes surviennent parfois dans une application de réservation lorsque les utilisateurs commencent à commander des produits, puis se rendent au déjeuner et reviennent quelques heures plus tard pour continuer la réservation. Je stocke la réservation dans la session jusqu'à ce que l'utilisateur confirme ou annule la réservation. Je n'ai donc pas besoin de parler à la base de données ni de gérer les réservations à mi-parcours lorsque les utilisateurs cliquent simplement sur X dans le navigateur et ne reviennent jamais.

Devrais-je plutôt utiliser le cache, des cookies ou une combinaison des deux?

(De plus, en cas d'erreur dans l'application, l'objet de session se réinitialise et j'ai plus de problèmes à cause de cela)

Je fais surtout de la programmation sur ordinateur et j’ai l’impression que je manque beaucoup de connaissances ici, donc tous ceux qui peuvent expliquer où utiliser Cache, Session, Cookies (ou db) seraient appréciés.

Edit: D'après les réponses, il me semble qu'une combinaison de base de données et de cookies est ce que je veux. 

  1. Je dois stocker la réservation dans la base de données connectée à un identifiant de session 
  2. Stockez l'identifiant de session dans un cookie (crypté). 
  3. Chaque page chargée vérifie le cookie et récupère la réservation de la base de données
  4. J'ai une procédure de nettoyage une fois par semaine qui efface les réservations inachevées.

Je ne peux pas enregistrer la réservation sous forme de cookie, car l'utilisateur peut alors modifier les prix et autres données sensibles et je dois tout valider (je ne peux pas faire confiance aux données).

Est-ce que j'ai bien compris?

Et merci pour ces bonnes explications à vous tous!

61
Stefan

La gestion des états est une chose essentielle à maîtriser lorsque vous entrez dans le monde Web du point de vue d’une application de bureau.

  • Session est utilisé pour stocker par utilisateur les informations de la session Web en cours sur le serveur. Il prend en charge l'utilisation d'un serveur de base de données comme magasin principal.
  • Cookie doit être utilisé pour stocker par utilisateur des informations pour la session Web en cours ou persistent des informations sur le client. Le client contrôle donc le contenu d'un cookie.
  • Cache object est partagé entre les utilisateurs dans une seule application . Son objectif principal est de mettre en cache les données d'un magasin de données et ne doit pas être utilisé comme stockage principal. Il supporte les fonctionnalités invalidation automatique.
  • L’objet Application est partagé entre les utilisateurs pour stocker au niveau de l’application state et doit être utilisé en conséquence. 

Si votre application est utilisée par plusieurs utilisateurs non authentifiés, je vous suggère de stocker les données dans un cookie. Si cela nécessite une authentification, vous pouvez stocker les données dans la base de données manuellement ou utiliser les fonctionnalités de gestion de profil ASP.NET.

80
Mehrdad Afshari

Web est par nature un modèle déconnecté et aucune des options mentionnées (Session, Application, Cache, ...) n'est suffisamment fiable. La session expirera, le processus de travail sera recyclé, etc.

Si vous avez vraiment besoin de stocker les progrès des utilisateurs, de manière fiable et sur de longues périodes, la base de données est votre seule solution. Si vous avez un profil utilisateur (si l'utilisateur doit se connecter), c'est simple. Sinon, générez un identifiant unique, enregistrez-le dans le cookie (ou l'URL) et suivez l'utilisateur en fonction de cette identification.

Assurez-vous simplement que l’ID est crypté, puis une chaîne encodée en base64 et pas seulement une valeur numérique.

MODIFIER:

Après votre explication supplémentaire dans la question initiale et le commentaire de Mehrdad Afshari, la bonne solution serait d'utiliser Session mais de définir le stockage sur Sql Server au lieu de InProc.

Voici plus de détails et d’instructions pour l’installer: http://msdn.Microsoft.com/en-us/library/ms178586.aspx

N'oubliez pas que vous aurez TOUJOURS les délais d'expiration de session, mais qu'ils survivront au recyclage du pool d'applications, même au redémarrage du serveur. 

Si vous avez vraiment besoin d'un stockage permanent, la solution personnalisée avec la base de données, comme je l'avais initialement décrite, est la seule solution.

4
markom

La session stockée sur le serveur expire par défaut au bout de 20 minutes (ajustable). Je voudrais stocker cela dans un cookie, ou dans viewstate (si disponible) pour éviter le délai d'attente.

Si votre état est stocké InProc (la configuration par défaut), le fait de disposer de plusieurs serveurs dans une batterie de serveurs posera également des problèmes, à moins que vous n'ayez mis en place une sorte de "session rémanente" qui maintiendra l'utilisateur sur le même serveur dans le répertoire. ferme pour les appels suivants.

J'essaie d'éviter la session lorsque cela est possible (charge supplémentaire et utilisation de la mémoire supplémentaire sur le serveur), et je garde ViewState désactivé lorsque cela est possible afin de conserver une taille de page minimale. Les cookies sont souvent l'option la plus légère, mais cela peut être désactivé pour vos utilisateurs et vous aurez besoin d'un mode de secours leur permettant d'utiliser le site.

Modifier (en ajoutant des précisions en fonction de la réponse du demandeur):

Viewstate est stocké dans un champ caché et est une représentation sérialisée de tous les objets du stockage Viewstate. Viewstate est automatiquement utilisé pour stocker l'état de la page, mais vous pouvez ajouter et récupérer explicitement vos propres objets dans et depuis Viewstate par programmation, si vous le souhaitez. 

Alors oui, les jeux de données peuvent être stockés dans Viewstate. 

2
Chris Ballance

Vous ne devez pas utiliser l'objet Cache pour mettre en cache les données de session, car le cache est partagé entre tous les utilisateurs. À la place, vous pouvez utiliser Asp.Net Propriétés du profil pour stocker vos données ou ajouter un gestionnaire d’événements à l’événement Session_End et stocker les données si l’utilisateur quitte l’ordinateur trop longtemps.

1
Rune Grimstad

Première chose à savoir! les cookies sont utilisés par session ! Le serveur sait qui est votre utilisateur grâce au cookie qui est échangé à chaque requête entre le client et le serveur (cela fonctionne avec les en-têtes HTTP set-cookie et cookie).

La vraie question est:

  • Si vous souhaitez stocker des informations sur l'utilisateur pendant la navigation, vous devez utiliser session. 

  • Si votre client ne prend pas en charge les cookies, vous pouvez alors décider de stocker un cookie dans chaque demande, codé dans l'URL (le serveur utilisera l'URL au lieu du cookie pour trouver la bonne session pour la demande).

Ensuite, réfléchissez à l'endroit où vous souhaitez stocker votre session:
Si votre site doit avoir une haute disponibilité et des performances élevées, vous ne devez pas stocker de session dans le processus, mais dans une base de données. De cette façon, vous pourrez partager le travail entre plusieurs serveurs Web . Mais vous perdrez en simplicité (car les objets que vous stockez dans votre session doivent être sérialisables), et vous avez encore un aller-retour entre votre serveur Web et votre base de données serveur.

1
Nicolas Dorier

J'étais toujours confus entre LocalStorage, SessionStorage et Cookie, mais plus maintenant.

Il suffit de lier les mots pour expliquer ce qu’ils supposent faire.

LocalStorage: Stockage local, qu'est-ce que cela signifie? Ce que vous ne connaissez pas en technologie, mais vous pouvez le deviner par lui-même. C'est un stockage qui stocke les données localement.

c'est ce que c'est.

Le système informatique stocke les données dans le navigateur without any expiration until user clear it par le biais du code JavaScript ou de la mémoire cache du navigateur.

Session Storage: On dirait que les données sont stockées mais liées à une session, en quoi elles sont différentes de localStorage?

La principale différence est votre session storage data will be deleted once the session is finish or browser tab is closed or the browser is closed.

Vous pouvez simplement essayer dans la console du navigateur en définissant

_localStorage.setItem('name' , 'alex')
sessionStorage.setItem('session','seesion value')
_

puis fermez l'onglet et ouvrez à nouveau, vous pouvez toujours trouver des données localStorage mais pas des données sessionStorage.

Cookie: C'est donc totalement différent des deux précédents. Un cookie généralement utilisé à des fins serveur.

  • Stocke les données qui doivent être renvoyées au serveur avec les demandes suivantes.
  • Son expiration varie en fonction du type et la durée d'expiration peut être définie du côté serveur ou du côté client (normalement du côté serveur).
  • Les cookies sont principalement destinés à la lecture côté serveur (pouvant également être lus côté client), localStorage et sessionStorage ne peuvent être lus que côté client.
  • La taille doit être inférieure à 4 Ko.
  • Les cookies peuvent être sécurisés en définissant l'indicateur httpOnly sur true pour ce cookie. Cela empêche l'accès côté client à ce cookie
0
UniCoder
  • Cookie est une information partagée entre des logiciels coopérants, qui stocke des informations spécifiques au client sur la machine du client et les récupère ultérieurement pour obtenir les informations d'état. 

  • a choisi le terme "cookie" comme "un cookie est un terme informatique bien connu utilisé pour décrire une donnée opaque détenue par un intermédiaire}". Le terme opaque implique ici que le contenu ne présente d’intérêt et de pertinence que pour le serveur et non pour le client. Le navigateur inclut automatiquement le cookie dans toutes ses demandes ultérieures à l'hôte d'origine du cookie. Un cookie a un nom et une valeur, ainsi que d'autres attributs, tels que domaine et chemin, date d'expiration, numéro de version et commentaires. pour more

Version du cookie: 

Cookie: cookie-name=cookie-value; Comment=text; Domain=domain-name; Path=path-name; Max-Age=seconds; Version=1; Secure
  • Les données session côté serveur peuvent stocker des données volumineuses. Les données cookie côté client sont limitées en taille et envoyées par un site Web au serveur. La session se ferme dès la fermeture du navigateur, mais les cookies existent plus longtemps. Le navigateur envoie un identifiant de session au serveur sous la forme d'un paramètre d'URL, d'un cookie ou même d'un en-tête HTTP.

  • Cache est un composant matériel ou logiciel qui stocke des données afin que les demandes futures de ces données puissent être traitées plus rapidement. les données stockées dans un cache peuvent être le résultat d'un calcul antérieur ou la duplication de données stockées ailleurs.

0
Premraj

Les cookies sont stockés dans le navigateur sous forme de fichier texte. La quantité de données stockée est limitée. Elle permet uniquement 4 ko [4096 octets] . Elle ne contient pas la variable multiple dans les cookies.

nous pouvons accéder facilement aux valeurs des cookies. Ainsi, il est moins sécurisé . La fonction setcookie () doit apparaître AVANT la balise .

Les sessions sont stockées sur le serveur. La quantité de données stockée est illimitée. Elle contient plusieurs variables dans les sessions. nous ne pouvons pas accéder facilement aux valeurs des cookies. Ainsi, il est plus sûr

0
Elangovan