Как разделить переменную php между несколькими сессиями в одном домене? - PullRequest
0 голосов
/ 21 марта 2019

Я ищу способ запуска сценария обслуживания каждую ночь, который должен блокировать только некоторых пользователей моего сайта.У моего сайта есть две группы пользователей: сумматоры контента и потребители контента.Когда сумматор контента переходит на определенный набор страниц на моем веб-сайте, я хочу отобразить на веб-странице сообщение «Техническое обслуживание» и запретить этому пользователю использовать функции на странице до завершения сценария фонового обслуживания.

Обычно я блокирую файл на сервере, но я видел здесь обсуждения StackOverflow, которые говорят, что метод ненадежен в php.Я мог бы обновить столбец в строке таблицы базы данных, но разве нет способа создать переменную «суперсессии», к которой могут иметь доступ все пользователи моего сайта?Таким образом, функция администрирования, являющаяся частью php-кода сайта, может быть вызвана сервером chron, и он может устанавливать, выполнять свою работу, а затем очищать общую переменную 'super-session'.

IЯ использую Symfony 2, если это поможет.

Я знаю, что здесь много о синхронизации пользователей, но все, что я ищу в этом вопросе, это как глобально разделить переменную во всех сеансахпользователи, получающие доступ к моему сайту, если это возможно.

Спасибо.

1 Ответ

0 голосов
/ 23 марта 2019

Я нашел "Семафор, Общая память и IPC" на http://php.net/manual/en/book.sem.php

Я еще не разработал фактический код, который собираюсь использовать, но я думаю, что пытаюсь создать семафор с«sem_acquire», где параметр nowait равен true, вернет false, если семафор уже существует и «заблокирован» другим процессом.

Таким образом, моя операция администратора получает семафор с использованием ложного параметра nowait, в то время каквыполняет обслуживание, и поэтому пользователи веб-сайта будут пытаться получить тот же семафор, используя истинный параметр nowait, и получат ложное значение и «узнают», что веб-сайт находится в режиме обслуживания.

Когда операция администратора завершится, тогдаСемафор выпущен.Таким образом, когда пользователи пытаются получить семафор, они получают истину, затем выпускают его и знают, что веб-сайт не находится в режиме обслуживания.

Операция администратора временно блокируется, когда пользователь пытается получить семафор, когда пользовательуспешно получил его, но затем продолжить, когда пользователь сразу же отпустит его.

...