Надеюсь, вы можете мне помочь. Обычно я читаю переменные сеанса в локальной переменной, так что мне не нужно создавать бесконечные блокировки чтения. Но я натолкнулся на какое-то интересное поведение. Обратите внимание, что я не применял никаких блокировок записи для краткости:Чтение значения из переменной сеанса в локальную переменную в Coldfusion
Рассмотрим следующий пример:
Пример 1:
<cfset session.testvalue = 1 />
<cfset lcktestvalue = session.testvalue />
<cfoutput>#lcktestvalue#</cfoutput><br />
<cfset session.testvalue = 2 />
<cfoutput>#lcktestvalue#</cfoutput>
ВЫХОД:
Пример 2:
<cfset session.testvalue1.item = 1 />
<cfset lcktestvalue1 = session.testvalue1 />
<cfoutput>#lcktestvalue1.item#</cfoutput><br />
<cfset session.testvalue1.item = 2 />
<cfoutput>#lcktestvalue1.item#</cfoutput>
ВЫВОД:
Я пытаюсь понять, почему второй пример, обновляет 'lcktestvalue1.item', когда значение читалось только один раз? я ожидал бы пример 1 & 2 для получения такого же выхода, и следующий, чтобы произвести выход второго примера по:
Пример 3:
<cfset session.testvalue1.item = 1 />
<cfset lcktestvalue1 = session.testvalue1 />
<cfoutput>#lcktestvalue1.item#</cfoutput><br />
<cfset session.testvalue1.item = 2 />
<cfset lcktestvalue1 = session.testvalue1 />
<cfoutput>#lcktestvalue1.item#</cfoutput>
ВЫХОД:
Единственная причина такого поведения, о котором я могу думать, состоит в том, что второй пример использует структуру внутри структуры. Но я не могу расширить эту концепцию. Ты можешь? Мне действительно нужно это понять, потому что я создаю корзину для покупок, которая широко использует методологию в примере 2. На самом деле это работает нормально, но я не уверен, почему, и я боюсь под нагрузкой, она может потерпеть неудачу?
Благодарим за помощь, которую вы можете мне дать.
"Бесконечные блокировки чтения"? Какую версию CF вы используете? Если вы не имеете дело с некоторыми фанковыми условиями гонки, вам, вероятно, вообще не нужно фиксировать переменные сеанса. –
Лучше быть в безопасности, чем сожалеть. Я слышал немало страшных историй о состоянии сеанса, даже с CF10. Из того, что я прочитал, есть несколько ошибок, а это значит, что эта проблема до сих пор не полностью решена Adobe. –