Bom dia! Segue abaixo um pequeno tutorial do que fiz para resolver minha demanda. O que precisava era o seguinte:
Na grid de usuários logados (gerada pelo módulo de segurança do scriptcase), criar um campo com evento ajax onClick e ao clicar nele, deslogar um determinado usuário. O usuário estando em outra tela, deveria ser redirecionado automaticamente para a tela de login.
Pra isso fiz:
Grid de usuários:
Criei um campo tipo texto chamado logout. No evento onRecord, coloquei um icone pra esse campo:
{logout} = '<i class="icon_fa fas fa-sign-out-alt"></i>';
No evento ajax onClick:
sc_logged_out({login});
sc_redir(minhaGrid);
Menu:
P.S.: Meu menu é feito baseado no tema AdminLTE. Então é feito em blank. Não testei em menu gerado pelo scriptcase mas acredito que dê na mesma.
No evento onExecute, coloquei o seguinte código:
<script>
$(document).ready(function(){
function getDatabaseMessage(){
var data = JSON.stringify({
"sessao": '<?php echo session_id();?>'
});
var xhr = new XMLHttpRequest();
xhr.withCredentials = true;
xhr.addEventListener("readystatechange", function () {
if (this.readyState === 4) {
var text = JSON.parse(this.responseText);
if(text.retorno == 'error'){
parent.window.location = "../seulogin/seulogin.php";//aqui estou redirecionando para minha tela de login
let timerInterval
Swal.fire({
title: 'Usuário desconectado!',
html: 'Seu usuário foi desconectado pelo administrador do sistema.',
timer: 100000,
onBeforeOpen: () => {
Swal.showLoading()
timerInterval = setInterval(() => {
Swal.getContent().querySelector('strong')
.textContent = Swal.getTimerLeft()
}, 10000)
},
onClose: () => {
clearInterval(timerInterval);
parent.window.location = "../seulogin/seulogin.php";//aqui estou redirecionando para minha tela de login
}
}).then((result) => {
if (
result.dismiss === Swal.DismissReason.timer
) {
}
})
}
}
});
// var str = pathname;
var res = "../suapaginablankdechecagem/index.php";//str.replace('Mmaster', 'ws-autentication');
xhr.open("POST", res);
xhr.setRequestHeader("User", "session");
xhr.setRequestHeader("Token", "XXXXXXX");
xhr.setRequestHeader("Content-Type", "application/json");
xhr.setRequestHeader("Cache-Control", "no-cache");
xhr.send(data);
/////////////////////////////////
}
getDatabaseMessage();
setInterval(getDatabaseMessage, 1000);
});
</script>
Blank de checagem:
header("Access-Control-Allow-Origin: *");
header('Content-Type: application/json');
$header = getallheaders();
$validAuth = false;
$data = "";
$method = $_SERVER['REQUEST_METHOD'];
if ($method != "POST"){
echo json_encode(array('retorno' => 'Method Not Allowed'));
}
if (isset($header["User"]) && isset($header["Token"])){
$user = $header["User"];
$password = $header["Token"];
if (($user == "session") && ($password == "XXXXXXX")) {
$validAuth = true;
}else{
echo json_encode(array('retorno' => 'Unauthorized'));
}
}else{
echo json_encode(array('retorno' => 'Bad Request'));
}
if ($validAuth == true){
$data = json_decode(file_get_contents("php://input") );
if (json_last_error() != 0) {
echo json_encode(array('retorno' => 'Syntax error, malformed JSON.'));
return;
}
if($user == 'session'){
$retorno = mVerificaUsuario($data->sessao);
echo json_encode(array('retorno' => $retorno));
return;
}
}
// MÉTODO mVerificaUSuario($sessao)
$sql = "SELECT COUNT(*) FROM tb_seguranca_logged WHERE sc_session = '".$sessao."'";
sc_lookup(rs, $sql);
if ({rs[0][0]} == 0){
return 'error';
}else{
return 'ok';
}