#php #mysql #session #web-applications
#php #mysql #сессия #веб-приложения
Вопрос:
На одной из моих страниц пользователи ставят в очередь поисковые запросы, которые будут запрашиваться из стороннего API. Поскольку они создают очередь, мой сайт выполняет запросы в фоновом режиме (через ajax), поэтому я могу кэшировать ответы, экономя их время при отправке. Я сохраняю переменную сеанса $_SESSION[‘isloading’] как true во время выполнения фоновых запросов и как false по их завершении.
При отправке страница результатов ожидает, что значение $ _SESSION[‘isloading’] будет false, прежде чем запрашивать результат в кэше. Тем временем им показывают колесо прогресса.
Есть ли название для этого метода использования сеанса для локальной «блокировки» пользователя перед переходом к следующему шагу в коде? Я придумал этот подход самостоятельно и задавался вопросом, является ли это распространенным (или хорошим) решением этой проблемы и используется ли оно где-либо еще.
Комментарии:
1. Что, если ваш скрипт прервется до того, как $ _SESSION[‘isloading’] может снова стать false из-за какой-либо ошибки, исключения или сбоя PHP?
2. Хм, я не подумал об этом, есть ли способ справиться с этим? Если нет, то какой метод вы бы предложили здесь?
Ответ №1:
Помещение его в $ _SESSION будет напрасной тратой усилий. Был там, сделал это, и это не сработало.
Вам будет намного лучше, если вы предоставите свою «строку поискового запроса» в качестве переменной $ _GET для вашего XHR (маркетологи называют это — Ajax).
Комментарии:
1. 1 за недовольство маркетологов (и за корректность ofc)
Ответ №2:
На первый взгляд, это звучит немного похоже на то, как некоторые старые форумные программы выполняют поиск по форуму в фоновом режиме, а видимая страница повторно обновляется до завершения фонового поиска.
Я не думаю, что для этого есть название; Я также полностью убежден, что это отличное решение. Как указал Стивекомри, вы столкнетесь с трудностями при параллелизме (если только имя переменной сеанса не уникально для каждого поискового запроса).
Я бы вместо этого рекомендовал XMLHttpRequest (как указывает Тереско, на самом деле это не называется «AJAX», тьфу!), и вы можете довольно просто справиться с «ожиданием» с помощью Javascript.
Ответ №3:
Я спросил об этом в IRC (подсказка к ## php на freenode), и они предложили мне просто сделать форму поиска и результаты поиска одной страницей. Затем, когда они закончат вводить свои запросы, представление изменится, а не перейдет на следующую страницу. Это устранило бы необходимость отслеживать состояние «isloading». Мне кажется, это лучший подход, есть ли с ним какие-либо проблемы?
Комментарии:
1. Это сработало бы, но вам нужно будет убедиться, что вы можете добавлять закладки в результаты поиска. Решение остается тем же: вы используете
$_GET
переменную (которую вы читаете из sit.e/search/ #!/frament ) для передачи данных вашему объекту XHR.