Variablen in der Variable $ _SESSION zwischenspeichern?

8

Ich mache eine PHP-Webanwendung, die benutzerspezifische Informationen speichert, die nicht mit anderen Benutzern geteilt werden.

Wäre es eine gute Idee, einige dieser Informationen in der Variable $ _SESSION für das Caching zu speichern? Beispiel: Zwischenspeichern einer Liste von Kategorien, die der Benutzer für sein Konto erstellt hat.

    
menko 11.12.2008, 22:30
quelle

3 Antworten

10

Dies wäre eine angemessene Verwendung des Sitzungsmechanismus, solange Sie dies im Hinterkopf behalten:

  • Die Sitzung besteht nicht für unbestimmte Zeit.
  • Wenn Sie von der Sitzung abziehen, stellen Sie sicher, dass Sie tatsächlich ein Ergebnis erhalten haben (ASP.NET gibt NULL zurück, wenn die Sitzung abgelaufen / gelöscht wurde)
  • Serverneustarts können den Sitzungscache löschen.
  • Tun Sie dies aus Bequemlichkeit, nicht Leistung. Wählen Sie für das Hochleistungs-Caching einen geeigneten Mechanismus aus (d. H. memcached )

Ein gutes Nutzungsmuster wäre so (Ether Cookies oder Session):

  • Der Benutzer meldet sich an
  • Store-Einstellungen (Hintergrundfarbe, letzte 10 betrachtete Datensätze, Kategorien) in Sitzung / Cookie.
  • Beziehen Sie sich beim Rendern einer Seite auf die Session / Cookie-Werte (stellen Sie sicher, dass es sich um gültige Werte handelt und nicht um Null).

Dinge in einem Cookie nicht zu tun

  • Speichern Sie keine sensiblen Daten (Session verwenden).
  • Ein Cookie-Wert sollte Ihnen keinen Zugriff gewähren / verweigern (Session verwenden).
  • Trap-Fehler, setzen voraus, dass Flags und Strings möglicherweise nicht dem entsprechen, was Sie erwarten, möglicherweise fehlen, während der Übertragung geändert werden können.

Ich bin mir sicher, dass es noch andere Dinge zu beachten gibt, aber das ist nur eine Frage meines Kopfes.

    
Bryan Rehbein 11.12.2008, 22:40
quelle
4

Das könnte für relativ kleine Datenmengen funktionieren, aber Sie müssen einige Dinge berücksichtigen:

  1. $ _ SESSION wird irgendwo zwischen den Anforderungen, der Datei auf der Festplatte oder der Datenbank oder etwas anderem gespeichert, je nachdem, was Sie verwenden möchten (Standard ist die Datei)
  2. $ _ SESSION ist lokal für einen einzelnen Benutzer auf einem einzelnen Computer.
  3. Sitzungen haben eine TTL (time to live), sie verschwinden nach einer bestimmten Zeit (die Sie kontrollieren)
  4. Unter bestimmten Umständen können Sitzungen blockieren (selten ein Problem, aber ich habe es streaming Flash) Wenn auf die Daten, die Sie cachen wollen, von mehreren Benutzern zugegriffen wird, ist es besser, sie separat zwischenzuspeichern.
Kris 11.12.2008 22:43
quelle
2

Wenn diese Daten nur während ihrer Sitzung verfügbar sein sollen, dann ja. Wenn Sie es morgen oder in 4 Stunden verfügbar haben möchten, müssen Sie es in einer Datenbank speichern.

Technisch können Sie die Sitzungen so ändern, dass sie eine sehr lange Lebensdauer haben, aber wenn sie einen anderen Computer, einen anderen Browser verwenden oder ihre Cookies löschen, verlieren sie den Link zu ihrer Sitzung, also sollten Sie ernsthaft eine Art von erstellen Benutzerkonto in Ihrer Anwendung verknüpfen Sie die Sitzung mit ihrem Konto und speichern Sie die Daten in einem Permeat-Ort.

    
TravisO 11.12.2008 23:53
quelle

Tags und Links