C#: Speichern in Cache oder Session?

Hallo Zusammen

Nachdem ich inzwischen (nach 3 Jahren Java-Erfahrung) meine dritte ASP.NET Applikation fertiggestellt habe, frage ich mich, welche Speicherung wohl optimaler ist (für Ergebnisse pro User): Cache oder Session?

Dazu konkret folgende Aspekte:

  1. Performance
  2. Security
  3. Webserverbelastung (Arbeit und Platz)
  4. was auch immer…

Welche der zwei Speicherarten ist für die obengenannten Aspekte besser? Warum?

Ich habe natürlich schon gegoogelt, aber das hat mich leider nicht weitergebracht.

Vielen Dank und Gruss
Andrea

Links
Hallo

ASP.NET ist leider nicht mein gebiet, kann also nur mit links und ein wenig allgemeinbildung dienen :smile:

Die Session ist pro User gültig, der Cache jedoch für die ganze Applikation.
Geeignet also zum Cachen von oft gebrauchte Stammdaten oder ähnliches.

Links
http://www.fawcette.com/Archives/premier/mgznarch/vb…
http://gotdotnet.com/Community/MessageBoard/Thread.a…
http://msdn.microsoft.com/library/default.asp?url=/l…

Gruss

Hallo Giuseppe

Vielen Dank erstmal für die Links. Leider wird auch da meine Frage nicht abschliessend beantwortet, da auch hier nicht darauf eingegangen wird, was im Detail bezüglich meiner erwähnten Punkte (wobei mich natürlich primär Security und Performance interessieren) die bessere Lösung ist.

Danke und Gruss
Andrea

hallo

beim link http://www.fawcette.com/Archives/premier/mgznarch/vb… steht in der sidebar Cache vs. Application folgendes betreffend Performance:

Using Cache or Application depends on what you need to do. If you need to control application-wide data and ensure local policies for locking, use Application. If you just need to share data with pages across the session boundaries, then Cache is much more effective and efficient.

Was genau musst du über security wissen?

gruss

Konkreter…
Hallo nochmals

Da hatte ich mich wohl unklar ausgedrückt (mal wieder ;o)). Also ich habe in der Applikation benutzerabhängige Daten und diese werden teilweise mit dem NT-Account in den Cache gespeichert (Cache[„example“ + utils.GetCurrentUserName()]) und teilweise auch in die einzelne Session. Wir hatten (aufgrund von Unwissenheit) mit dem Cache angefangen und sind danach auf die Session umgestiegen. Nun stellt sich für uns die Frage welcher dieser zwei Speicherarten optimaler ist und somit auch wie wir unsere Applikation „vereinheitlichen“ sollen.

Wird die Problemstellung nun klarer?

Danke und Gruss
Andrea

Hallo

Also, so wie du beschrieben hast, würde ich die benutzerspezifischen sachen in die Session reintun. Der Cache so zu gebrauchen finde ich gefährlich und unschön.

Gruss
Giuseppe

1 Like

Salü

Genau das dachte ich mir ja auch, aber wenn wir das Zeug schon umbauen, brauch ich auch eine genaue Begründung dafür (für die Projektleitung… ), da sie sich mit der Begründung „saubere Architektur“ nicht zufrieden geben.

Ich stelle mir das so vor:

  • 1 Cacheobjekt, jeder hat Zugriff, es wird einfach das Value zum eingegebenen Key aus dem Cache geholt
  • n Sessionobjekte, jeder User hat nur auf seins Zugriff
    Wenn das tatsächlich so abläuft, kann ich auch begründen, warum das theoretisch unsicherer ist.

Schickt man eigentlich die Session-Objekte jedesmal über die Leitung? Ich stell mir eher vor, dass die beim Server bleiben, aber wie identifiziert sich dann der Client, per IP?

Danke nochmals und Gruss
Andrea

Sallutti

Deine Begründung ist richtig so.
Bedenke auch, dass wenn sich die anforgerungen ändern, und deine app via internet laufen soll oder andere browser als IE unterstüzen soll, deine methode mit dem „Login User“ nicht mehr funktioniert.

Irrtum vorbehalten:
Session State wird mit einem Cookie gelöst mit einer ID als referenz gelöst.

Bei ASP.NET 2.0 gibt es auch einen „Cookielosen“ Ansatz, da wir die id in die url gepackt. beispiel http://www.meinserver.com/meineid/login.aspx.

hier: http://msdn.microsoft.com/library/default.asp?url=/l… steht auch dass „Cookieless“ auch mit .net 1.X geht…

gruss
giuseppe

p.s. wo arbeitest du eigentlich? du bist ja auch aus der schweiz…

1 Like

Salü

Bedenke auch, dass wenn sich die anforgerungen ändern, und
deine app via internet laufen soll oder andere browser als IE
unterstüzen soll, deine methode mit dem „Login User“ nicht
mehr funktioniert.

Das ist klar, aber da es um Intranet mit IE geht, können wir uns mit den Microsoft Funktionalitäten austoben (btw. das ganze funktioniert mit Firefox auch, es geht automatisch ein Popup auf, mit dem man sich an der Domäne anmelden kann)

http://msdn.microsoft.com/library/default.asp?url=/l…
steht auch dass „Cookieless“ auch mit .net 1.X geht…

Jepp, so arbeiten wir auch, aber ich habe noch nie analysiert, ob auch wirklich kein Cookie daher kommt.

Danke und Gruss zurück
Andrea

p.s. wo arbeitest du eigentlich? du bist ja auch aus der
schweiz…

In St. Gallen, grosser Telekomunikationsanbieter und Du?

In St. Gallen, grosser Telekomunikationsanbieter und Du?

In Thalwil (ZH) kleine Dienstleistungsbude :smile: