Como garantir um login único no sistema?

(rrma) #1

Pessoal, terei em breve um sistema hospedado em meu servidor, que será usado por algumas empresas clientes. Um dos quesitos que irá influenciar na mensalidade destes clientes é a qtde de logins simultâneos (como no scriptcase). Como o sistema é via internet e não intranet, o uso do ip do cliente não serve, pois ele poderia acessar de várias estações de sua rede interna ao mesmo tempo, usando sempre o mesmo usuário e, neste caso a resolução nat do modem do cliente me daria sempre o ip externo dele. Preciso arrumar uma forma de cercear o uso do sistema por cliente e login, para que seja possível logar uma única vez.
Eu poderia tentar fazer o que o SC faz, mas é difícil fazer um usuário executar um logoff ao terminar a sessão, e isso impediria um próximo login com o mesmo usuário.
Alguém já implementou algo parecido?

Rodrigo

(Diogo Toscano) #2

Vai ter que fazer algo parecido com o que o sc faz, eu acho :-p

voce pode travar o session_id que a identificação da pessoa logada … mas alguma hora vc vai ter que controlar o tempo logado sem a pessoa fazer logout.

porque como vc mesmo falou, nem todo mundo faz logout, mas se a pessoa tem usuario e senha e foi pra outro computador uns 10 minutos depois e quizer entrar no sistema … acho que deveria deixar, entao vc teria que ter o controle de timeout pra liberar o acesso…

jaja dao mais sugestões

(George Carvalho) #3

Sugeri que a rotina de login do Scriptcase fosse disponibilizada para nos usuários implementarmos nas nossas aplicações, não sei se vai ser atendida.

(Haroldo) #4

Cria uma tabela em memoria:
*Sessao_ID
*Usuario_Id
DataHora (timeStamp)

  • Chave exclusiva.

No menu vc tem algumas opções:
Pode criar uma div escondida com iframe chamando um script faz refresh a cada n segundos (30 segudnos por exmplo) que:
Localiza o registro baseado no id do usuário e sessão_php e atualiza a datahora.
Rastreia os registros e exclui aqueles cujo o tempo seja superior a 45 segundos (por exemplo).

No Login: acessa os registro com count(*) group by usuario logado <- aqui vc tem usuarios online.

A acada acesso a uma aplicação através do menu, atualize a datahora dessa tabela tb. e pode criar triggers emtodas as tabelas para tambem atualizar a datahora dessa tabela.

Para garantir o numero de acessos simultaneos tb pode fazer a verificação com count(*) group by usuarios a cada acesso de aplicação, e solicitar ao usuario se logar novamente.

Aqui vc consegue controlar o nro de usuários simultaneamente sem se preocupar com o fato do usuário não dar logout.

A queda de performance é minima pois a tabela é em memória.

(rrma) #5

Obrigado a todos pelas respostas!
Harold, ficou meio confuso pra mim, não sou tão bom nem de php nem no modo web de desenvolver. Vou estudar um pouco sobre sessões e como o php faz o controle disso, valeu pela ajuda!
De qualquer forma, talvez eu adote a forma como o sc faz, avisando que já existe um login ativo e perguntando se quer deslogar o anterior.
Rodrigo

(Haroldo) #6

tente imaginar um script atualizando a hora a cada 30 segundos do usuário que se logou (isso em background). Quando o usuário fechar o browser, vai ficar registada a última hora, quando o usuario entrar em outra sessão, um novo registro é gerado e o tempo começa a correr novamente, ficando um registro láa morto. Como controlar quantos estão online, pelo número de registros cujo o tempo é inferior a n segundos.
Não é complicado. Faço isso em meu sistema e funciona direitinho.

(Diogo Toscano) #7

E ainda pode abrir um parametro na interface do sistema pro proprio usuario configurar.

Tipo … 10minutos para expirar a sessão …