2016-01-27 2 views
0

Мне нравится этот сайт, способный найти ответы на все мои вопросы до сих пор.Laravel 5 Сессия не сохраняется достоверно

У меня есть два транзакции Ajax здесь, где в первой транзакции введенные значения помещаются в сеанс, вторая транзакция извлекает введенные значения и предыдущие значения транзакций, чтобы знать, как действовать. Это утверждение не кажется надежным, но оно работает лучше, чем 90% времени. Почему это не надежно? Транзакция завершается успешно, и экран выглядит правильно отформатированным.

Session::put('previous', serialize($entry)); 

Пример транзакции A; Пользователь просматривает пункт СКП, сделка идентифицирует БЗК 0587, как правильно, создает $ запись, и отвечает обратно пользователю «Пожалуйста, поставьте 0587 в тотализатор 3334»

$entry = (object) ['type' => 'UPC', 'text' => '0587']; 
Session::put('previous', serialize($entry)); 

Пример транзакции B; пользователей просматривает тотализатор, транзакция идентифицирует тотализатор 3334, как правильно, а затем запрашивает предыдущей записи транзакции

$previous = (object) unserialize(Session::get('previous', self::UNKNOWN_SERIAL)); 

Лучше, чем 90% времени $ предыдущий равно, что мы хотим (БЗК, 0587). Иногда $ previous равно значениям из предыдущей транзакции до транзакции A. $ previous будет равно self :: UNKNOWN_SERIAL для первой транзакции после входа в систему.

Почему Session: put (..) выглядит ненадежным?

Любая помощь будет оценена по достоинству.

+0

Можете ли вы поделиться некоторыми сведениями о A) вашей инфраструктуре сервера и B), какой драйвер сеанса вы используете? – mopo922

+0

Да, пример выше произошел на моем сайте разработки, Ubuntu 14.04.2 LTS, версия сервера: Apache/2.4.7 (Ubuntu). Что касается драйвера сеанса, в .env SESSION_DRIVER = файл, в config/session.php 'driver' => env ('SESSION_DRIVER', 'file'), 'lifetime' => 120, 'expire_on_close' => true, 'encrypt '=> false, –

+0

Только один сервер? – mopo922

ответ

0

Оказывается, это проблема с сериализацией. Изменено хранение $ entry между этими двумя транзакциями, используя Request :: session() -> getId(); как часть ключа. Это решило проблему. Тестирование показало, что другие проблемы, связанные с вторжением, используя тот же запрос :: session(), вызвали эту проблему.

Смежные вопросы