2017-05-05 8 views
-1

Ich bin irgendwie neu mit cfml und ich versuche herauszufinden, ob Komponenten in den Anwendungsbereich ist in Ordnung, wenn alles in der Komponente ist var 'd.Sind cfc sicher in der Anwendung Bereich

Ich weiß, dass der Bereich von allen Benutzern geteilt wird, aber wenn alle Variablen var 'd in den Funktionen sind würde das verhindern, dass die Leute einander Daten und/oder Race-Bedingungen sehen?

Dank

+2

Hängt davon ab, was die Komponenten tun. Wenn die Komponenten wirklich zustandslos sind, ist es sicher, sie in einem gemeinsamen Bereich zu speichern. Zustandslose Komponenten/Funktionen a) speichern keine Informationen aus früheren Anfragen und b) geben bei bestimmten Argumenten immer das gleiche Ergebnis zurück. Solange alle Variablen in der zustandslosen cfc lokal definiert sind, gibt es keine Möglichkeit für Rennbedingungen. Es ist NICHT sicher, * stateful * -Komponenten in einem gemeinsamen Bereich zu speichern. Das kann zu einer Vielzahl von unerwarteten und seltsamen Ergebnissen führen (http://stackoverflow.com/search?q=%5Bcoldfusion%5D%20race%20conditions). – Leigh

+0

Können Sie uns eine Vorstellung davon geben, was die Funktionen sind? Was ist das Ziel, das Sie erreichen möchten? –

+0

Ich habe mich hauptsächlich gefragt, ob Speichern Benutzerfunktion mit Benutzerinformationen sicher wäre. Ich vermute, ich versuchte herauszufinden, was sicher war und was nicht. – brian

Antwort

1

Wenn die Daten, die Sie in der Komponente speichern gehören die ganze Anwendung, wie z.B. Einige Seitenlayoutdaten können im Anwendungsbereich gespeichert werden.

Wenn die Komponente zustandslos ist, d. H. Alle Variablen darin sind im lokalen Bereich, ist es sicher, Objekte zu speichern, die in diesem Bereich erstellt wurden.

Obwohl, wenn die Komponente Stateful ist, dh es Daten aus früheren Anfragen oder benutzerspezifische Daten darin gespeichert wird, ist es nicht sicher zu speichern, Objekte aus es in dem Anwendungsbereich geschaffen, da dieser Datenverlust verursachen kann und andere unerwartete und unerwünschte Ergebnisse aufgrund von race conditions oder falschem Zugriff.
In diesem Fall sollten Sie Ihre Komponente lieber im Sitzungsumfang speichern.

+1

@brian - Ein paar Unterschiede, die nicht offensichtlich sein können: 1) * RE: gehört zur gesamten Anwendung * Auch relevant ist, ob die Daten schreibgeschützt oder schreibgeschützt sind. Daten auf Anwendungsebene wie die Gesamtzahl der Online-Benutzer können im App-Bereich gespeichert werden, müssen jedoch gesperrt werden, um Race-Bedingungen zu vermeiden. 2) * RE: alle darin enthaltenen Variablen sind im lokalen Geltungsbereich * Das bedeutet wörtlich alle Variablen. Wenn Sie vergessen haben, eine einzelne Lese-/Schreibvariable in den 'var'-Bereich zu verschieben, landet sie im 'variables'-Bereich des CFC, was im Wesentlichen der Anwendungsumfang in diesem speziellen Szenario ist. – Leigh

+1

... so lautet die Antwort "es kommt darauf an". Wie bereits erwähnt, wäre es hilfreich, detailliertere Informationen zu Ihren Funktionen zu geben, damit wir Sie gezielter beraten können. – Leigh

+0

@Leigh Ich denke, die Lese-Lese-/Schreib-Unterscheidung ist, was ich suchte, danke für Ihre Hilfe, um meinen Kopf herum zu bekommen. – brian