Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Luiz Gustavo Costa Ceolin

Agendamento de Tarefas Laravel 5.2

Recommended Posts

Bom dia. Eu utilizo o agendamento de tarefas do laravel para fazer uma verificação nos formulários avaliados no meu sistema e para fazer BKP do meu DB ao dia.

 

Estou implementando no sistema as permissões de poder logar só nos dias solicitados e nos horários definidos. Meu problema é a questão do horário, quero que elimine a sessão do usuário logado caso passe do horário permitido, assim eu apliquei a verificação dentro do mesmo agendamento dos formulários, mas não está funcionando a verificação da hora.

Segue meu código

 

$schedule->call(function(){
            
            $stt = DB::table('resp_identificacao')
                ->where('status_id','=','1')
                ->get();

            foreach ($stt as $key => $value) 
            {
                if(Carbon::now('America/Sao_Paulo') > $value->data_prev_retorno)
                {
                    DB::update('UPDATE resp_identificacao SET status_id = "3" where id = '.$value->id.'');
                }
            }
// esta parte é a verificação da hora
            $dt = Carbon::now('America/Sao_Paulo');

            $hora = $dt->format('H:i:s');

            $hora_entrada = $permission->hora_entrada;
            $hora_saida = $permission->hora_saida;

            if($hora_entrada > $hora || $hora_saida < $hora)
            {

                echo Session::flush();
            }
// fim verificação
        })->everyMinute();

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Deixa eu ver se entendi, você quer deslogar todos os usuários com Session::flush() ?

Outro detalhe, se tem horários programados, porque esta usando minuto a minuto.

Não é mais fácil usar
 

->between($start, $end);

Para rodar nos horários específicos.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sim, quem passar do horário permitido para estar logado, quero que seja deslogado no momento. 

Eu faço a mesma verificação no controller da home do sistema, quando ele loga verifica se ele pode estar logado, se não puder dou um Session::flush(). Só não consigo fazer isso com o Schedule do laravel.

 

A questão dos minutos, é porque estou testando e assim fica mais tranquilo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Session::flush() é para apagar todas as sessões do usuário  e não de todos os usuários, desta forma se eu tivesse 1000 usuários logados e um novo entrar e efetuar login deslogaria todos e seria um catástrofe para meu sistema.

Agora se você tiver conhecimento de NODE.js, você pode rodar um script.js para efetuar isso.

Ae tu roda um comando no sistema pra deslogar todos.

$schedule->exec('node /home/foo/bar/script.js')->everyMinute();

ou crie uma middleware que faça uma consulta em uma tabela, desta forma você usa a agenda para setar nestes horarios ON ou OFF, se tiver OFF deslogue todo mundo.

Bem mais simples.

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom amigo, pelos testes que fiz, o Session::flush() quebra apenas todas as sessões da máquina logada, tanto que nos testes eu loguei em 2 máquinas com o mesmo usuário, quando executei um Session::flush() na maquina 1, a máquina 2 continuou rodando normalmente.

Não tenho conhecimentos em node.js, mas vou tentar utilizar as middleware do laravel. Valeu..

Compartilhar este post


Link para o post
Compartilhar em outros sites

No seu sistema, não rola controlar a sessão no banco de dados?

Tendo isso no banco, ficaria bem mais fácil.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pegue a data máxima que o usuário pode ficar logado até expirar, converta para timestamp, depois converta a data atual para timestamp também, e se atual > limite, destrói as sessions, na minha cabeça parece simples, estou certo?

Compartilhar este post


Link para o post
Compartilhar em outros sites
4 horas atrás, hufersil disse:

No seu sistema, não rola controlar a sessão no banco de dados?

Tendo isso no banco, ficaria bem mais fácil.

A middleware no laravel faria uma unica consulta para cada requisição, caso o usuário tenta-se logar novamente, pode até criar uma views avisando que está em manutenção e seria mais tranquilo.

Com a middleware você pode definir quais rotas estaria dentro do grupo. Agora deslogar já seria uma opção, já que a rota estaria bloqueada.

 

 

1 hora atrás, Mateus Silva disse:

Pegue a data máxima que o usuário pode ficar logado até expirar, converta para timestamp, depois converta a data atual para timestamp também, e se atual > limite, destrói as sessions, na minha cabeça parece simples, estou certo?

Totalmente!

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por landerbadi
      Boa tarde pessoal. Estou tentado fazer uma consulta no banco de dados porém estou tendo dificuldades. Tenho uma tabela chamada "itens" com os seguintes campos: id, item, ativo. Nela tem cadastrado vários itens. No campo ativo eu coloco a letra "S" para informar que este item está ativo no sistema. Por exemplo: 1, casa, S 2, mesa, S 3, cama, S 4, moto S 5, rádio O quinto registro "radio" não está ativo no sistema pois não tem um "S" no campo ativo. E outra tabela chamada "produtos" com os seguintes campos (id, item1, item2, item3) com os seguintes registros: 1, casa, mesa, moto 2, mesa, casa, cama 3, rádio, cama, mesa Eu preciso fazer uma busca na tabela produtos da seguinte maneira: Eu escolho um registro na tabela "itens", por exemplo "mesa". Preciso fazer com que o php me liste todos os registros da tabela "produtos" que contenham a palavra "mesa". Até aqui tudo bem eu consigo listar. Estou fazendo assim: <?php $item = "mesa" $sql = mysqli_query($conn, "SELECT * FROM produtos WHERE item1 LIKE '$item' OR item2 LIKE '$item' OR item3 LIKE '$item' LIMIT 10"); while($aux = mysqli_fetch_assoc($sql)) { $id = $aux["id"]; $item1 = $aux["item1"]; $item2 = $aux["item2"]; $item3 = $aux["item3"]; echo $id . " - " . $item1 . ", " . $item2 . ", " $item3 . "<br>"; } ?> O problema é que está listando todos os registros que contém o item mesa. Eu preciso que o php verifique os demais item e me liste somente os registro em que todos os registros estejam ativos no sistema. No exemplo acima ele não deveria listar o registro 3. pois nesse registro contém o item "radio" e este item não está ativo no sistema. Ou seja, o registro "radio" na tabela itens não possui um "S" na coluna "ativo". Alguém sabe como resolver isso?
    • Por ILR master
      Fala galera.
      Espero que todos estejam bem.
      Seguinte: Tenho um arquivo xml onde alguns campos estão com : (dois pontos), como o exemplo abaixo:
       
      <item>
      <title>
      d sa dsad sad sadasdas
      </title>
      <link>
      dsadas dsa sad asd as dsada
      </link>
      <pubDate>sadasdasdsa as</pubDate>
      <dc:creator>
      d sad sad sa ad as das
      </dc:creator>
      </item>
       
      Meu código:
       
      $link = "noticias.xml"; 
      $xml = simplexml_load_file($link); 
      foreach($xml -> channel as $ite) {     
           $titulo = $ite -> item->title;
           $urltitulo = $ite -> item->link;
           print $urltitulo = $ite -> item->dc:creator;
      } //fim do foreach
      ?>
       
      Esse campo dc:creator eu não consigo ler. Como faço?
       
      Agradeço quem puder me ajudar.
       
      Abs
       
       
    • Por First
      Olá a todos!
       
      Eu estou criando um sistema do zero mas estou encontnrando algumas dificuldades e não estou sabendo resolver, então vim recorrer ajuda de vocês.
      Aqui está todo o meu código: https://github.com/PauloJagata/aprendizado/
       
      Eu fiz um sistema de rotas mas só mostra o conteúdo da '/' não sei porque, quando eu tento acessar o register nada muda.
      E eu também quero que se não estiver liberado na rota mostra o erro de 404, mas quando eu tento acessar um link inválido, nada acontece.
      Alguém pode me ajudar com isso? E se tiver algumas sugestão para melhoria do código também estou aceitando.
       
       
      Desde já, obrigado.
    • Por landerbadi
      Olá pessoal, boa tarde
       
      Tenho uma tabela chamada "produtos" com os seguintes campos (id, produto) e outra tabela chamada "itens" com os seguintes campos (id, prod_01, prod_02, prod_03, prod_04).
       
      Na tabela produtos eu tenho cadastrado os seguintes produtos: laranja, maçã, uva, goiaba, arroz, feijão, macarrão, etc.
       
      Na tabela itens eu tenho cadastrado os itens da seguinte maneira:
       
      1, laranja, uva, arroz, feijão;
      2, maçã, macarrão, goiaba, uva;
      3, arroz, feijão, maçã, azeite
       
      Meu problema é o seguinte: 
      Eu escolho um produto da tabela "produtos", por exemplo "uva".  Preciso fazer uma consulta na tabela "itens" para ser listado todos os registros que contenham o produto "uva" e que todos os demais produtos estejam cadastrados na tabela "produtos".
       
      No exemplo acima seria listado apenas dois registros, pois o terceiro registro não contém o produto "uva". 
       
      Alguém pode me ajudar? Pois estou quebrando a cabeça a vários dias e não consigo achar uma solução.
    • Por landerbadi
      Boa tarde pessoal. Estou tentado fazer uma consulta no banco de dados porém estou tendo dificuldades. Tenho uma tabela chamada "itens" com os seguintes campos: id, item, plural, ativo. Nela tem cadastrado vários itens e seu respectivo plural. No campo ativo eu coloco a letra "S" para informar que esta palavra está ativa no sistema. Por exemplo: 1, casa, casas, S 2, mesa, mesas, S 3, cama, camas, S 4, moto, motos, S 5, rádio, rádios O quinto registro "radio" não está ativo no sistema pois não tem um "S" no campo ativo. E outra tabela chamada "variações" com os seguintes campos (id, item1, item2, item3) com os seguintes registros: 1, casa, camas, moto 2, mesas, casas, radio 3, rádio, cama, mesa Eu preciso fazer uma busca na tabela variações da seguinte maneira: Eu escolho um registro na tabela "itens", por exemplo "casa". Preciso fazer com que o php me liste todos os registros da tabela "variações" que contenham a palavra "casa". Porém se tiver algum registro com a palavra "casas" também tem que ser listado. Neste caso ele irá encontrar dois registros. Agora eu preciso que o php verifique os demais itens e faça a listagem apenas dos item que estão ativos (que contenham um "S" no campo ativo. Neste caso ele irá encontrar apenas um registro, pois o segundo registro contém a palavra "rádio". E "rádio" não está ativo na tabela itens. Como faço isso?
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.