1. This site uses cookies. By continuing to use this site, you are agreeing to our use of cookies. Learn More.

  2. Anuncie Aqui ! Entre em contato fdantas@4each.com.br

[RESOLVIDO] Limite de Sessão

Discussão em 'EMS , HCM e Totvs 11' iniciado por lhp.s, Fevereiro 26, 2018.

Status do Tópico:
Não esta aberto para novas mensagens.
  1. rafael.andrade

    rafael.andrade Membro Master Moderador Equipe de Suporte

    Fácil...eh só verificar se o usuário que está tentando logar já está logado e cancela login
    don.junior curtiu isso.
  2. bootstrapmaster

    bootstrapmaster Moderator Moderador Equipe de Suporte

    Bem, upc na rotina seapi004aa.p
    Código:
    /*  ------------------------------------------------------------
        Programa .:
        Autor ....: Richard Edgar - Imesul
        Data .....:
        Descricao :
        ------------------------------------------------------------ */
        {grid2/error.i}
    
        using totvs.usuario.*.
    
        define variable error    as ExceptionControl no-undo.
        define variable verifica as VerificaSessoes  no-undo.
    
        define variable handleProc as handle no-undo.
        define variable handleWin  as handle no-undo.
       
        {utp/ut-glob.i}
        {include/i-epc200.i1}
    
        def input        param p-ind-event as char no-undo.
        def input-output param table for tt-epc.
    
        assign error    = ExceptionControl:getInstance()
               verifica = new VerificaSessoes().
    
        if p-ind-event = 'validation_login' then do:
            error:clearExceptions().
            do {&try}:
                verifica:processar().
            {&catch}
            error:showExceptions().
            if error:catchException() then stop.
        end.
    
    A classe VerificaSessoes le a tabela ....
    Código:
    /*  ------------------------------------------------------------
        Programa .: totvs.usuario.VerificaSessoes.cls
        Autor ....: Richard Edgar - Imesul
        Data .....: 22/09/2017
        Descricao : Verificar quantidade de sessoes de um usuario
                    no banco emsfnd, comparar com cadastro.
        ------------------------------------------------------------ */
        {grid2/error.i}
    
        using totvs.usuario.*.
    
        class totvs.usuario.VerificaSessoes:
            define variable error            as ExceptionControl no-undo.
            define variable usuario          as CstUsuario       no-undo.
            define variable contagem         as integer          no-undo.
            define variable limite           as integer          no-undo.
            define variable computadorLogado as character        no-undo.
    
            constructor public VerificaSessoes():
                assign error           = ExceptionControl:getInstance()
                       usuario         = new CstUsuario().
    
                assign computadorLogado = os-getenv('COMPUTERNAME').
                if os-getenv('CLIENTNAME') <> ? then assign computadorLogado = os-getenv('CLIENTNAME').
            end constructor.
    
            method public integer getLimite():
                return limite.
            end method.
    
            method public integer getSessoes():
                return contagem.
            end method.
    
            method public void processar():
                define variable computador     as character no-undo.
                define variable contador       as integer   no-undo.
                define variable erroComputador as logical   no-undo.
    
                assign contagem = 0
                       limite   = 3.
                assign computador = ''.
                usuario:findBYID(userid('emsfnd'),'no-error').
                if usuario:isExist() then do:
                    assign limite     = usuario:getLimiteSessoes()
                           computador = usuario:getComputador().
                end.
                error:clearExceptions().
                assign contagem = lerSessoes().
    
                if contagem > limite then error:throwException('SESSOES',
                                                               'ERRO LIMITE SESSOES',
                                                               substitute('USUARIO &1 excedeu limite de &2 sessoes', userid('emsfnd'), limite)).
                if trim(computador) <> '' then do:
                    assign erroComputador = yes.
                    repeat contador = 1 to num-entries(computador):
                        if computadorLogado = entry(contador, computador) then assign erroComputador = no.
                    end.
                    if erroComputador = yes then error:throwException('SESSOES','ERRO ACESSO USUARIO',substitute('USUARIO &1 so pode acessar pelo computador(es) &2', userid('emsfnd'), computador)).
                end.
            end method.
    
            method private integer lerSessoes():
                define variable contador as integer no-undo.
    
                assign contador = 0.
                for each  emsfnd._Connect no-lock
                    where emsfnd._Connect._connect-name = userid('emsfnd'):
                    assign contador = contador + 1.
                end.
                return contador.
            end method.
        end class.
    
    
    Bem, só lembrando que pra que tudo isso funcione, vc tem que no datasul habilitar a opção de time-out, não que vc vá usa-la, mas é que ela dispara um parametro que quando um usuario se loga no datasul, registra no banco, eu deixei como default, 3 sessões por usuario, dai alguns usuarios avançados podem usar mais, e ainda consegui fazer com que um usuario só se loga se estiver no computador dele, isso porque tinha um gerente que tava dando a senha dele pra outros, então restringi que a senha dele só loga no notebook dele, usuarios, usuarios, temos que trata-los igual crianças
    lucasiam e don.junior curtiram isso.
  3. jaozi_nho

    jaozi_nho Membro Participativo

    Gente, já tentaram usar o parâmetro Windows Single Session (-wss), creio que foi feito para isso, basta adicionar no -pf .

    Abraço .
  4. bootstrapmaster

    bootstrapmaster Moderator Moderador Equipe de Suporte

    mas o -wss controla o prowin32, só uma sessão por maquina, com esse meu controle ai, vc determina 4 sessões por exemplo, não importa a maquina, ontem mesmo aconteceu, a menina abriu o usuario dela 2 vezes em uma maquina, mais uma em outro maquina, e quis abrir mais uma no acesso remoto, dai travou, pra que abrir tanta coisa assim e ainda mais espalhado, ela queria assovia e chupar cana ao mesmo tempo.
  5. jaozi_nho

    jaozi_nho Membro Participativo

    kkkkk, complicado esses usuários né Richard, seu código ficou muito bom, guardei aqui como exemplo.
  6. rafael.andrade

    rafael.andrade Membro Master Moderador Equipe de Suporte

    Seria possível matar a sessão mais antiga antes de logar na quarta vez?
Status do Tópico:
Não esta aberto para novas mensagens.

Compartilhe esta Página