2016-08-16 2 views
-1

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

, если я получил что-то вроде этого

session_start(); 

if (isset($_SESSION['lock'])) { 

    if ($_SESSION['lock'] === false) { 

     $_SESSION['lock'] = true; 
    } 
} 

этот код в файл, который выполняется с запросом AJAX, когда переменная была обновлена ​​с новым значением будет обновлять в глобальном масштабе? , Я имею в виду, что у меня есть две вкладки с одной и той же страницей (tab1 и tab2) после выполнения скрипта в tab1, когда я делаю то же самое в tab2, значение $_SESSION['lock'] будет true или false?, Я надеюсь, что это объяснение будет хорошим, спасибо.

Примечание: были открыты обе вкладки одновременно

+0

Вы попробовали? Потому что вы спрашиваете, что произойдет. – Steve

+0

@Steve Я попытался, но это не сработало, вот почему я спрашиваю, потому что я не знаю всех функций сессий в PHP, они работают глобально, и если я обновляю одну переменную, она будет обновляться на протяжении всего сеанса на момент не имеет значения, если я не перезагружаю страницу? извините, мой английский не очень хорош –

+0

Этот вызов ajax лучше сделать до того, как ваш скрипт выполнится, иначе трудоемкий скрипт может выполняться дважды в любом случае. – coderodour

ответ

1

Да, сеансы связаны с уникальным пользователем, поэтому они распространились над вкладками. Почему бы вам просто не проверить его?

2

Да, изменение $_SESSION является глобальным изменением для этого конкретного пользователя. Но учтите, что изменения до $_SESSION НЕ выталкиваются в несколько окон «вживую». Только при последующих ударах в ЛЮБОЙ окне/вкладке новое значение может повлиять на эти вкладки/окна.

+0

Я понимаю, у вас есть представление о том, как я могу это достичь? другой метод или что-то еще? или это невозможно? –

+0

вы можете использовать websockets/long-polling/etc ... для проверки таких вещей, но реальный квест был бы следующим: зачем вам нужна немедленная обратная связь для такого рода вещей? Если другое окно активно запрашивает окно, оно отключается от сервера и не может ничего делать на сервере. В следующий раз, когда он попадает на сервер, ТОГДА вы можете сказать, что все заблокировано. –

+0

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

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