0

Ich habe eine Website, wo Menschen Beiträge erstellen und senden können (wie auf Stackoverflow und Facebook).Wie können Sie mehrere Beiträge gleichzeitig bearbeiten, ohne sie zu überschreiben?

Eine Sache, die der Benutzer tun kann, ist ein Foto anzuhängen, bevor er die Post abschickt. Sobald das Foto angehängt ist (unter Verwendung von AJAX), wird ein neues PostID in der Back-End-Datenbanktabelle für den Post erstellt, der bearbeitet und im Bereich SESSION des Benutzers gespeichert wird, z. SESSION.LoggedIn.PostID = rsInsertedPost.PostID.

Die gleichen Dinge passieren, auch wenn ein Foto nicht angeschlossen ist, außer dass es die PostID auf die endgültige Einreichung der Post stattdessen erstellen wird.

Der Grund, warum ich es in der SESSION-Bereich speichern, ist, weil die PostID, die gerade erstellt wurde, in mehreren anderen Bereichen in der Back-End-Anwendung (CFC-Komponente in meinem Fall) verwendet wird. Zum Beispiel wird es Tags einfügen, die der Benutzer mit seinem Posten in einer separaten Tabelle zugeordnet dbo.PostTags wie solche:

PostID | Tag 
44  ColdFusion 
44  Programming 
44  SQL 

Nachdem die Verarbeitung der Formularübertragung beendet hat, wird es die PostID aus der Sitzung des Benutzers entfernen.

Das Problem, auf das ich stoßen werde, ist, wenn ein Benutzer mehrere Browserfenster öffnet und beschließt, gleichzeitig mit mehreren Posts zu arbeiten. Der PostID-Wert der SESSION wird weiterhin von der neu erstellten überschrieben, was bedeutet, dass wenn sie sich dazu entschließen würden, zu einem anderen Browser-Tab zurückzukehren und ihren Post zu senden, würde dies den zuletzt erstellten Post betreffen.

Was wäre ein guter Weg, um dieses Problem zu überwinden, eine Spur von PostIDs zu behalten, an denen die Leute gerade pro Fenster arbeiten. Gibt es ein anderes eindeutiges Attribut, das ich zusammen mit der PostID in der SESSION speichern könnte, so dass nur dieses pro geöffnetem Browserfenster betroffen ist?

+4

Dies ist wahrscheinlich das Argument Nummer eins gegen das Speichern von Informationen im Sitzungsumfang. Der Weg, um damit fertig zu werden, besteht darin, die postId in ein verstecktes Formularfeld oder etwas Ähnliches zu bringen und es zu verarbeiten, wenn Sie das Formular absenden. –

+0

@DanBracuk Gibt es keine andere Alternative? Ich habe versucht, in einigen Büchern nachzuschlagen, aber ich bin mir nicht sicher, unter welchem ​​'Thema' das kommen würde. Können Sie mir einige Themen vorschlagen, die mit dieser Art von Szenario zu tun haben könnten? –

+0

Was ist los mit dem Speichern der ID in einem versteckten Feld? – Leigh

Antwort

0

Ich verwende gerne UUIDs. Dann bin ich mir sicher, dass ich niemals dieselbe ID zweimal benutzen werde, nicht einmal über Datenbanktabellen hinweg. Anstatt also die PostID auf eine Zahl zu setzen (normalerweise 1 + die letzte ID in der Datenbanktabelle), verwenden Sie #createUUID()#.

Verwandte Themen