Php щелкните авторизованного пользователя с помощью ajax

Добрый день из часового пояса GMT + 8.

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

поскольку у пользователя все еще есть доступ, когда сеанс еще действителен, я хочу ввести ajax, чтобы вызвать сервер, чтобы проверить статус на setInterval. на backend php: проверьте, заблокирован ли пользователь, завершите сеанс, подайте окно предупреждений и перенаправьте.

но теперь проблема в том, что мой код не работает , вот мой вызов ajax, если я не закомментирую //console.info('success ');, успех будет сохранен в console.info, что означает, что вызов успешен.

<script>
        function getUserStatus(){
            $.ajax({
                type: "POST",
                url: 'ajax/ajax.php',
                data: {username: '<?php echo $_SESSION['admin_username'] ;?>' },
                success: function(response){
                    //console.info('success');
                }
            });
        }

        setInterval(function(){
            getUserStatus();
        },3000);

    </script>

на моей странице ajax.php я убеждаюсь, что соединение с db работает,

    if ($_SERVER["REQUEST_METHOD"] == "POST") {

        $admin_username = check_input($_POST['username']);

  if ( isLocked($admin_username) ){
       session_destroy();
echo "<script>window.alert('you had been clicked out');window.location.href='../index.php';</script>";
        }

    }

функция проверки того, что пользователь заблокирован

function isLocked($username){
    global $connection ; 
    $query = "SELECT status FROM table where name = '$username' ";
    $result = mysqli_query($connection,$query);
    confirm($result);

    while(  $row = fetch_array($result)){
        if ($row['status'] == 'locked' ){
            return true;
        }else{
            return false;
        }  
    }
}

если я напрямую обращаюсь к ajax.php с пользователем журнала, работает действие ниже.

    if ( isLocked($admin_username) ){
                session_destroy();
echo "<script>window.alert('you had been clickedout');window.location.href='../index.php';</script>"; }

не уверен, что не так с моими кодами и как это исправить?

любая помощь / предложение были бы весьма признательны.

ваш ajax.php возвращает скрипт, пытались ли вы добавить dataType: "script" к вашему вызову (после type: "POST") и удалить теги <script> в эхо-запросе?

FatFreddy 06.06.2018 09:01

@FatFreddy, он работает, не могли бы вы объяснить логику? вы можете написать в качестве ответа, я приму его, кстати, спасибо, есть ли другие способы заархивировать его без использования ajax, потому что это может добавить нагрузку на сервер. оценил

Leong 06.06.2018 09:12

могу я удалить это -> успех: функция (ответ) {} сейчас? как я делаю все действия в файле php.

Leong 06.06.2018 09:18

попробуйте ;-) Я бы не рекомендовал это, я всегда использую успех и ошибку, или поскольку jquery 3.0 a .fail и .done часть

FatFreddy 06.06.2018 09:28

другой вариант - не использовать заданный интервал или тайм-аут, а просто проверять каждый файл .php isLockedfile, что приведет к тому, что действие не будет отображаться для бездействующего пользователя. или другой вариант мои розетки.

FatFreddy 06.06.2018 09:38

спасибо, это звучит работоспособно

Leong 06.06.2018 09:42
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
6
42
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

ваш ajax.php что-то повторяет, это могут быть данные, json или, в вашем случае, js-скрипт. Ajax вызывает ajax / ajax.php, если HTTP-запрос завершается успешно, он входит

success: 
        function(response){
                        //console.info('success');
                }

поэтому переменная response содержит вывод этого вызова ajax / ajax.php. если вы используете

$.ajax({
                type: "POST",
                url: 'ajax/ajax.php',
                dataType: "script",
                data: {username: '<?php echo $_SESSION['admin_username'] ;?>' },
                success: function(response){
                    //console.info('success');
                }

значение «response» будет выполнено, если это рабочий скрипт. (без тегов)

дополнительную информацию вы можете найти здесь: http://api.jquery.com/jQuery.ajax/

без dataType: "script" в вызове можно было бы сделать что-то вроде этого:

function(response){
                    //console.info('success');
                    $('#somediv').html(response);
                }

который вставит результат в div, если это хорошо отформатированный js-скрипт, он будет выполнен.

Другие вопросы по теме