2009-07-08 1 views
0

Lange Einführung:Kann ich Datenbankeinträge erstellen, die an eine Sitzung gebunden sind und gelöscht werden, wenn die Sitzung zerstört wird?

Normalerweise werden alle Daten für meine Web-Anwendung erforderlich sind, in Session-Variablen gespeichert. Nur wenn der Benutzer explizit sagt, dass etwas gespeichert werden soll, wird es in der Datenbank gespeichert. (Wie das Speichern eines Kommentars oder Erstellen einer Bestellung aus einem Einkaufswagen)

In meiner neuesten Rails-Anwendung habe ich festgestellt, dass ich wirklich viele von Rails ' Helfer wie find zum Beispiel verwenden konnte. Leider benötigen einige Funktionen wie find einen gespeicherten Datensatz.

Ich habe auch eine hierarchische Struktur von temporären ActiveRecords, aber sie haben keine IDs und ich könnte wirklich diese IDs verwenden, um einzelne Datensätze zwischen Controller-Aktionen zu identifizieren.

Kurze Frage:

Wie kann ich diese vorübergehenden Einträge in die Datenbank schreiben und damit alle die ActiveRecords Funktionalität gewinnen, aber stellen Sie sicher, dass diese Aufzeichnungen gelöscht werden, sobald die Sitzung ungültig wird?

Antwort

2

JA, verwenden Sie die Sitzungs-ID als A PK und eine Spalte für das Verfallsdatum/-zeit und schreiben Sie die Informationen in eine Tabelle oder Tabellen. Wenn die Sitzungs-ID groß ist, verwenden Sie eine Identitäts-/Auto-Nummer als PK und speichern und indexieren Sie die Sitzungs-ID. Verwenden Sie bei Bedarf die Identität/Auto-Nummer als FK für andere Tabellen.

Außerdem benötigen Sie einen Sortier- oder Garbage Collection-Job, der alle x Minuten ausgeführt wird, um alles zu löschen, dessen Ablaufdatum größer als das aktuelle Datum/die aktuelle Uhrzeit ist.

+1

Vergessen Sie nicht, das Verfallsdatum bei jedem Laden der Seite zu aktualisieren. – AndyMcKenna

+0

@AndyMcKenna guter Punkt, aber da Sie alle Daten auch aktualisieren würden, nahm ich das irgendwie an. Abhängig von der Komplexität der zu speichernden Sitzungsinformationen würde ich in Betracht ziehen, sie jedes Mal zu löschen und dann einfach jede Seite neu einzufügen. –