Ich verwende Coldfusion MX 8. Ich hatte kürzlich eine Situation, in der Variablen zwischen den Sitzungen zu "wechseln" scheinen. Ich habe einige Informationen über den Austausch von ganzen Sitzungen gefunden, aber das war nicht der Fall. Es wurde nur eine Variable ausgetauscht, nicht die gesamte Sitzung. Mein Code-Schnipsel folgen:Wie global sind Coldfusion-Variablen, die nicht mit "var" deklarieren?
var idArray = ListToArray(arguments.event.getArg("itemIDs"));
var oItemDetail = 0;
var oItem = 0; //Inserting this line seems to have fixed the error.
var i = 0;
for (i=1;i lte ArrayLen(idArray);i=i+1) {
//Log Spot #1 – cflog idArray[i] and arguments.event.getArg("statusNotes")
oItem = getItemService().getItem(idArray[i]);
oItemDetail = getItemService().getItemDetail();
oItemDetail.setItemID(oItem.getItemID());
oItemDetail.setStatusNotes(arguments.event.getArg("statusNotes"));
getItemService().saveItem(oItem);
getItemService().saveItemDetail(oItemDetail);
}
//getItem and getItemDetail just call getTransfer().get()
//saveItem and saveItemDetail just call getTransfer().save()
Zum Beispiel bei Log Punkt # 1, idArray [i] gewesen „1“ haben könnte, und das StatusNotes Ereignis arg könnte „abc“ sein.
Aber sollte eine andere Person, in einer anderen Sitzung, ein anderes Login verwenden, an einem anderen Ort, einem anderen Browser usw.etc. Verwenden Sie die Funktion genau zur gleichen Zeit, indem Sie idArray [i] = "2" und statusNotes = "def" verwenden, dann kann "Details" "abc" stattdessen an "2" angehängt werden und "Details" an Artikel angehängt " 1 ".
Die Tatsache, dass bei Log Spot # 1 die protokollierten Variablen korrekt sind, aber in der Datenbank vertauscht sind, verweist auf diese Codezeilen als Verdächtige.
Dieses Problem ist verschwunden, indem oben "Var oItem" deklariert.
Also ich denke, ich bin ein wenig schockiert von dieser Offenbarung. Ich würde annehmen, dass das Nicht-Deklarieren meiner lokalen Variablen eine andere Variable mit dem gleichen Namen in einer anderen Funktion bedeuten würde, aber in derselben Sitzung überschrieben werden könnte. Aber das scheint eine Art internes Speicherproblem zu sein. Die Variablen werden nicht einmal zwischen den Sitzungen überschrieben, sondern ausgetauscht!
Ich frage mich, ob jemand ähnliche Erfahrungen gemacht hat und könnte etwas Licht dazu bringen?
Ihre Antwort war hilfreich, danke. Das liegt daran, dass das cfc von allen Sitzungen gemeinsam genutzt wird und die Variable nicht als einzelne Funktionsaufrufe, sondern als Ganzes in der cfc gespeichert wurde. Ich bin immer noch ein wenig verwirrt, warum die Variablen tatsächlich tauschen würden. Ich würde verstehen, wenn sie einfach überschrieben würden, aber beide Variablen blieben intakt und wurden jeweils von der anderen Sitzung referenziert. Aber es ist jetzt ein kleines Detail, dass ich verstehe, wo das Shared Memory Problem aufgetreten ist. –
Der CFC kann nur gemeinsam von allen Sitzungen verwendet werden, wenn er in einem persistenten Bereich geteilt wird, der von allen Sitzungen (z. B. Anwendung oder Server) gemeinsam genutzt wird. Es ist wahrscheinlich, dass Sie eine so genannte "Race Condition" erstellt haben. Sie haben zwei Benutzer gleichzeitig auf ein gemeinsam genutztes Objekt geklickt und aufgrund der Objektbereichsvariable die Daten des jeweils anderen statt ihrer eigenen abgerufen. –