Существует ли общее название для этого метода «блокировки сеанса»?

#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.