У меня есть приложение Symfony, которое заполняет «виджеты» приложения портала, и я заметил кое-что (что кажется) странным.В приложении портала есть фреймы, которые делают вызовы в приложение Symfony.При каждом из этих вызовов в строку запроса передается случайный ключ пользователя.Приложение Symfony сохраняет этот ключ в своем сеансе, используя myUser->setAttribute()
.Если входящее значение отличается от того, которое оно имеет в сеансе, оно перезаписывает значение сеанса.
В псевдокоде (и применяет синхронный характер для ясности, даже если оно может не существовать):
# Widget request arrives with ?foo=bar
if the user attribute 'foo' does not equal 'bar'
overwrite the user attribute 'foo' with 'bar'
end
Что я замечаю, так это то, что на странице портала с несколькими виджетами (читай: несколько запросов поступают более или менее одновременно), где значение необходимо перезаписывать, каждый запрос пытается перезаписать .Это проблема времени?Когда я смотрю на распечатки журнала, я ожидаю, что первый поступающий запрос перезапишет, а последующие запросы увидят, что полученный пользовательский атрибут соответствует тому, что было просто помещено в кеш первоначальным запросом.
В этом случае последующие запросы начинаются (и проверяются) еще до того, как первый - тот, который должен перезаписать кэшированное значение - полностью завершится.Значения сеанса в действительности недоступны для последующих запросов, пока один запрос не будет выполнен полностью или может быть что-то еще, что я пропускаю?
Спасибо.