Звучит так, как будто у вас есть два отдельных запроса, один из которых записывает данные в сеанс, а другой пытается одновременно считывать данные из сеанса.Это верно?Прекратите чтение, если это не так.
Это может не сработать, потому что «сессия» - это просто cookie - заголовок HTTP-ответа, который загружается в ваш браузер как cookie, а затем повторно загружается при следующем запросе,затем повторно загрузили следующий ответ, ad nosium.В вашем коде порядок операций следующий:
/ examples / 1 / run_duplicate записывает "0" в то, что по сути является Ruby Hash, представляя ваш сеансовый cookie
/ examples / 1 / check_dupe_status считывает значения из файла cookie сеанса , который был только что отправлен из вашего браузера с этим запросом.Скорее всего, в нем ничего нет: duplicate, поэтому он будет выглядеть пустым.
/ examples / 1 / run_duplicate записывает "1" в сеанс Ruby Hash
/ examples / 1 / check_dupe_status снова читает файл cookie сеанса, который отправил этот запрос - ничего не изменилось
/ examples / 1 / run_duplicate write "2 "в хэш сеанса Ruby
/ examples / 1 / check_dupe_status считывает исходный файл cookie сеанса, который он отправил - без изменений
/ examples/ 1 / run_duplicate записывает «3» в хэш сеанса Ruby , и запрос завершается , отправляя сеанс обратно в виде файла cookie со значением 3 в: duplicate.
/ examples / 1 / check_dupe_status все еще сидит там как дуфус, читая пустой сеансовый файл cookie, который он первоначально отправил
В какой-то момент / examples / 1 / check_dupe_status может истечь время ожидания, ион может вернуться с файлом cookie сеанса.Но угадайте что?Так как: дубликат никогда не устанавливался в этом сеансовом cookie, он будет перезаписывать тот в вашем браузере, и: duplicate будет пустым при следующем отправляемом вами запросе.
Надеюсь, я четко выразил это,По сути, вы используете гоночные условия в своих файлах cookie, и это очень трудно преодолеть, если вы отправляете параллельные запросы из одного и того же браузера.
Лучший способ справиться с этим - написать свой дубликат 0,1,2 и т. Д. Значения для некоторой таблицы базы данных.Ваш длинный опросный запрос может затем просто считаться из базы данных.Возможно, немного менее эффективно, но, конечно, у него есть то преимущество, что оно может работать.