it-swarm.com.de

VS-VS-Cookies zwischenspeichern?

Was sind die Vor- und Nachteile von Cache VS Session VS Cookies?

Zum Beispiel:
Ich benutze häufig Session-Variablen und habe manchmal Probleme in einer Buchungsanwendung, wenn Benutzer damit beginnen, Produkte zu bestellen und dann zum Mittagessen gehen und einige Stunden später wiederkommen und die Buchung fortsetzen. Ich speichere die Buchung in der Sitzung, bis der Benutzer die Buchung bestätigt oder abbricht, sodass ich nicht mit der Datenbank sprechen und halbwegs Buchungen in der Datenbank abwickeln muss, wenn Benutzer nur das X im Browser anklicken und niemals zurückkommen.

Sollte ich stattdessen Cache oder Cookies oder eine Kombination davon verwenden?

(Auch wenn ein Fehler in der App vorliegt, setzt sich das Session-Objekt zurück und ich bekomme dadurch mehr Probleme)

Ich mache hauptsächlich Desktop-Programmierung und habe das Gefühl, dass mir hier viel Wissen fehlt, sodass jeder, der mehr über Cache, Session, Cookies (oder Db) erfahren kann, sehr dankbar wäre

Edit: Aus den Antworten scheint es, dass eine Kombination aus DB und Cookies das ist, was ich will. 

  1. Ich muss die Buchung in der Datenbank speichern, die mit einer Sitzungs-ID verbunden ist 
  2. Speichern Sie die Sitzungs-ID in einem Cookie (verschlüsselt). 
  3. Bei jedem Seitenaufruf wird der Cookie überprüft und die Buchung aus der Datenbank abgerufen
  4. Ich habe ein Aufräumungsverfahren, das einmal pro Woche ausgeführt wird und unfertige Buchungen löscht.

Ich kann die Buchung nicht als Cookie speichern, da der Benutzer Preise und andere vertrauliche Daten ändern kann und ich alles überprüfen musste (kann den Daten nicht vertrauen).

Habe ich es richtig verstanden?

Und vielen Dank für die tollen Erklärungen an Sie alle!

61
Stefan

Die Verwaltung der Zustände ist eine entscheidende Angelegenheit, wenn Sie aus der Perspektive der Desktopanwendungen in die Web-Welt einsteigen.

  • Session wird verwendet, um pro Benutzer Informationen für die aktuelle Websitzung auf dem Server zu speichern. Es unterstützt die Verwendung eines Datenbankservers als Back-End-Store.
  • Cookie sollte verwendet werden, um pro Benutzer Informationen für die aktuelle Websitzung oder persistent Informationen zu client zu speichern, daher hat der Client die Kontrolle über den Inhalt eines Cookies.
  • Cache Objekt wird von Benutzern in einer einzigen Anwendung gemeinsam genutzt . Sein Hauptzweck ist das Cachen von Daten aus einem Datenspeicher und sollte nicht als Primärspeicher verwendet werden. Es unterstützt die Funktionen automatic invalidation.
  • Das Application-Objekt wird von Benutzern zum Speichern von anwendungsweit state gemeinsam genutzt und sollte entsprechend verwendet werden. 

Wenn Ihre Anwendung von einer Reihe nicht authentifizierter Benutzer verwendet wird, sollten Sie die Daten in einem Cookie speichern. Wenn eine Authentifizierung erforderlich ist, können Sie die Daten entweder manuell in der Datenbank speichern oder die ASP.NET-Profilverwaltungsfunktionen verwenden.

80
Mehrdad Afshari

Web ist von Natur aus nicht verbundenes Modell und keine der genannten Optionen (Sitzung, Anwendung, Cache, ...) sind zuverlässig genug. Sitzung läuft ab, Arbeitsprozess recycelt usw.

Wenn Sie wirklich den Fortschritt der Benutzer sicher und über längere Zeiträume speichern müssen, ist die Datenbank Ihre einzige Lösung. Wenn Sie ein Benutzerprofil haben (wenn sich der Benutzer anmelden muss), ist es unkompliziert. Wenn nicht, generieren Sie eine eindeutige ID, speichern Sie diese in dem Cookie (oder der URL) und verfolgen Sie den Benutzer anhand dieser Identifikation.

Stellen Sie nur sicher, dass die ID verschlüsselt ist und dann eine Base64-kodierte Zeichenfolge und nicht nur ein numerischer Wert.

BEARBEITEN:

Nach Ihrer zusätzlichen Erklärung in der ursprünglichen Frage und dem Kommentar von Mehrdad Afshari wäre eine gute Lösung für Sie, Session zu verwenden, aber den Speicher auf SQL Server anstelle von InProc zu setzen.

Weitere Informationen und Anweisungen zum Einrichten finden Sie hier: http://msdn.Microsoft.com/en-us/library/ms178586.aspx

Beachten Sie, dass Sie immer noch die Sitzungszeitüberschreitungen haben, die wiederverwendet werden, aber auch Server-Neustarts. 

Wenn Sie wirklich einen permanenten Speicher benötigen, ist die Lösung, wie ich sie ursprünglich beschrieben habe, die einzige Lösung.

4
markom

Die Sitzung wird auf dem Server gespeichert und wird standardmäßig in 20 Minuten beendet (Dies ist einstellbar). Ich würde dies in einem Cookie oder in Viewstate (falls verfügbar) speichern, um das Timeout zu verhindern.

Wenn Ihr Status in InProc (der Standardeinstellung) gespeichert ist, führt das Problem mit mehreren Servern in einer Farm auch zu Problemen, es sei denn, Sie haben eine Art "sticky session" implementiert, durch die der Benutzer auf demselben Server im Server bleibt Farm für nachfolgende Anrufe.

Ich versuche, eine Sitzung zu vermeiden, wenn dies möglich ist (zusätzliche Belastung und Speicherauslastung des Servers), und Viewstate sollte nach Möglichkeit deaktiviert sein, um die Seitengröße niedrig zu halten. Cookies sind oft die leichteste Option, aber bei Ihren Benutzern ist diese Option möglicherweise deaktiviert, und Sie benötigen einen Fallback-Modus, der es ihnen ermöglicht, die Website zu verwenden.

Bearbeiten (Hinzufügen einer Klarstellung basierend auf der Antwort des Fragestellers):

Viewstate wird in einem verborgenen Feld gespeichert und ist eine serialisierte Darstellung aller Objekte im Viewstate-Speicher. Viewstate wird automatisch zum Speichern des Seitenstatus verwendet. Sie können jedoch Ihre eigenen Objekte explizit programmgesteuert zu Viewstate hinzufügen und von diesem abrufen, wenn Sie dies wünschen. 

Ja, Datensätze können in Viewstate gespeichert werden. 

2
Chris Ballance

Sie sollten das Cache-Objekt nicht zum Zwischenspeichern von Sitzungsdaten verwenden, da der Cache von allen Benutzern gemeinsam genutzt wird. Sie können stattdessen Asp.Net Profileigenschaften verwenden, um Ihre Daten zu speichern, oder Sie können dem Session_End-Ereignis einen Ereignishandler hinzufügen und die Daten speichern, wenn der Benutzer den Computer zu lange verlässt.

1
Rune Grimstad

Als erstes musst du wissen! Cookies werden von Session verwendet ! Der Server weiß, wer Ihr Benutzer ist, dank des Cookies, das bei jeder Anforderung zwischen Client und Server ausgetauscht wird (dies funktioniert mit HTTP-Headern, set-cookie und cookie).

Die eigentliche Frage ist:

  • Wenn Sie Benutzerinformationen während der Navigation speichern möchten, sollten Sie Session verwenden. 

  • Wenn Ihr Client keine Cookies unterstützt, können Sie in jeder Anfrage ein Cookie speichern, das in der URL codiert ist (der Server verwendet die URL anstelle des Cookies, um die richtige Sitzung für die Anfrage zu finden).

Dann überlege dir, wo du deine Sitzung speichern möchtest:
Wenn Ihre Site über eine hohe Verfügbarkeit und Leistung verfügen muss, dürfen Sie die Sitzung nicht innerhalb des Prozesses, sondern innerhalb einer Datenbank speichern. Auf diese Weise können Sie die Arbeit auf mehreren Webservern freigeben. Sie verlieren jedoch an Einfachheit (da Objekte, die Sie in Ihrer Sitzung speichern, serialisierbar sein müssen) und Sie einen weiteren Umweg zwischen Ihrem Webserver und Ihrer Datenbank haben Server.

1
Nicolas Dorier

Ich war immer verwirrt zwischen LocalStorage, SessionStorage und Cookie, aber nicht mehr.

Verlinke einfach die Wörter sind selbsterklärend, was sie zu tun vermuten.

LocalStorage: Local Storage, was bedeutet das, nur dass Sie nichts über Technologie wissen, aber an sich können Sie es erraten. Es ist ein Speicher, in dem Daten lokal gespeichert werden.

das was es ist.

IT speichert Daten im Browser without any expiration until user clear it über JavaScript-Code oder Browser-Cache löschen.

Sitzungsspeicher: Es scheint, als würde es auch Daten speichern, die sich jedoch auf eine Sitzung beziehen. Wie unterscheidet es sich dann von localStorage?

Der Hauptunterschied ist Ihr session storage data will be deleted once the session is finish or browser tab is closed or the browser is closed.

Sie können es einfach in der Browserkonsole durch Einstellen versuchen

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

Wenn Sie die Registerkarte schließen und erneut öffnen, werden weiterhin localStorage-Daten, jedoch keine sessionStorage-Daten angezeigt.

Cookie: Das ist also völlig anders als die beiden oben. Ein Cookie, das im Allgemeinen für den serverseitigen Zweck verwendet wird.

  • Speichert Daten, die mit nachfolgenden Anforderungen an den Server zurückgesendet werden müssen.
  • Das Ablaufdatum hängt vom Typ ab und die Ablaufdauer kann entweder serverseitig oder clientseitig (normalerweise serverseitig) festgelegt werden.
  • Cookies dienen in erster Linie dem serverseitigen Lesen (können auch clientseitig gelesen werden), localStorage und sessionStorage können nur clientseitig gelesen werden.
  • Die Größe muss unter 4 KB liegen.
  • Cookies können sicher gemacht werden, indem das httpOnly-Flag für dieses Cookie auf true gesetzt wird. Dies verhindert den clientseitigen Zugriff auf dieses Cookie
0
UniCoder
  • Cookie ist eine Information, die von zusammenarbeitenden Software-Teilen gemeinsam genutzt wird, indem clientspezifische Informationen auf dem Client-Computer gespeichert und später abgerufen werden, um die Statusinformationen zu erhalten. 

  • wählen Sie den Begriff "cookie" als "ein Cookie ist ein bekannter Begriff aus der Informatik, der zur Beschreibung eines undurchsichtigen Datenbestandes eines Vermittlers verwendet wird". Der Begriff "undurchsichtig" bedeutet hier, dass der Inhalt nur für den Server und nicht für den Client von Interesse und Relevanz ist. Der Browser fügt das Cookie automatisch in alle nachfolgenden Anfragen an den ursprünglichen Host des Cookies ein. Ein Cookie hat einen Namen und einen Wert sowie andere Attribute wie Domäne und Pfad, Ablaufdatum, Versionsnummer und Kommentare. für mehr

Cookie-Version: 

Cookie: cookie-name=cookie-value; Comment=text; Domain=domain-name; Path=path-name; Max-Age=seconds; Version=1; Secure
  • Serverseitige session -Daten können große Daten speichern, und die clientseitigen cookie -Daten sind in der Größe begrenzt, die von einer Website an den Server gesendet werden. Cookies enthalten normalerweise Referenzcode aufgrund dieser Größe, die die Größe der Daten speichert. Die Sitzung wird geschlossen, sobald der Browser geschlossen wird. Cookies sind jedoch länger vorhanden. Der Browser sendet eine Sitzungs-ID als URL-Parameter, Cookie oder sogar HTTP-Header an den Server.

  • Cache ist eine Hardware- oder Softwarekomponente, die Daten speichert, damit zukünftige Anforderungen für diese Daten schneller bedient werden können. Die in einem Cache gespeicherten Daten können das Ergebnis einer früheren Berechnung sein oder das Duplikat der an anderer Stelle gespeicherten Daten.

0
Premraj

Cookies werden im Browser als Textdateiformat gespeichert. Es wird nur eine begrenzte Datenmenge gespeichert. Es werden nur 4kb [4096Bytes] zugelassen. Die mehreren Variablen werden nicht in Cookies gespeichert.

wir können auf die Cookies-Werte leicht zugreifen. Damit ist weniger sicher. Die setcookie () -Funktion muss VOR dem Tag erscheinen.

Sessions werden auf der Serverseite gespeichert. Es wird eine unbegrenzte Datenmenge gespeichert. Sie enthält mehrere Variablen in Sessions. Wir können nicht leicht auf die Cookies-Werte zugreifen. Daher ist sicherer

0
Elangovan