Добрый день из часового пояса 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>"; }
не уверен, что не так с моими кодами и как это исправить?
любая помощь / предложение были бы весьма признательны.
@FatFreddy, он работает, не могли бы вы объяснить логику? вы можете написать в качестве ответа, я приму его, кстати, спасибо, есть ли другие способы заархивировать его без использования ajax, потому что это может добавить нагрузку на сервер. оценил
могу я удалить это -> успех: функция (ответ) {} сейчас? как я делаю все действия в файле php.
попробуйте ;-) Я бы не рекомендовал это, я всегда использую успех и ошибку, или поскольку jquery 3.0 a .fail и .done часть
другой вариант - не использовать заданный интервал или тайм-аут, а просто проверять каждый файл .php isLockedfile, что приведет к тому, что действие не будет отображаться для бездействующего пользователя. или другой вариант мои розетки.
спасибо, это звучит работоспособно






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