Ir para conteúdo
Fórum Script Brasil
  • 0

Como obter o nome da máquina


Geomar Canjundo

Pergunta

Olá Como faço para saber o nome de uma máquina em Rede?

Ou seja a quero impedir que usuário aceda ao sistema em duas máquinas em simultâneo e a ideia é que se isso acontecer, o sistema envie a mensagem

("o usuário já está logado na máquina nome da máquina")

Aguardo ajudas

Geomar

Link para o comentário
Compartilhar em outros sites

11 respostass a esta questão

Posts Recomendados

  • 0

Amigo para pegar o nome local da maqui é esta funcão abaixo

function NomeComputador : String;

var

lpBuffer : PChar;

nSize : DWord;

const Buff_Size = MAX_COMPUTERNAME_LENGTH + 1;

begin

nSize := Buff_Size;

lpBuffer := StrAlloc(Buff_Size);

GetComputerName(lpBuffer,nSize);

Result := tiramascara(String(lpBuffer));

StrDispose(lpBuffer);

end;

agora para fazer oque você esta querendo o ideal é criar uma tabela acesso_sistema.

quando o usuario logar você salva nesta tabela a data hora minuto segundo que ele logou o nome da maquina e o nome ou codigo do usuario esta tabela deverá conter o campo status onde 0 será logado e 1 será não logado, ao fechar o sistema você deve muda o status do registro para 1.

toda vez que o usuario tentar acessar o sistema você faz uma busca na base de dados pegando o dia atual e verificando se tem status 0 se tiver é so mostrar a menssagem você esta logado na maqina TAL.

imagino que isso resolva seu problema.

qualquer duvida estamos aqui para te ajudar.

Link para o comentário
Compartilhar em outros sites

  • 0
Amigo para pegar o nome local da maqui é esta funcão abaixo

function NomeComputador : String;

var

lpBuffer : PChar;

nSize : DWord;

const Buff_Size = MAX_COMPUTERNAME_LENGTH + 1;

begin

nSize := Buff_Size;

lpBuffer := StrAlloc(Buff_Size);

GetComputerName(lpBuffer,nSize);

Result := tiramascara(String(lpBuffer));

StrDispose(lpBuffer);

end;

agora para fazer oque você esta querendo o ideal é criar uma tabela acesso_sistema.

quando o usuario logar você salva nesta tabela a data hora minuto segundo que ele logou o nome da maquina e o nome ou codigo do usuario esta tabela deverá conter o campo status onde 0 será logado e 1 será não logado, ao fechar o sistema você deve muda o status do registro para 1.

toda vez que o usuario tentar acessar o sistema você faz uma busca na base de dados pegando o dia atual e verificando se tem status 0 se tiver é so mostrar a menssagem você esta logado na maqina TAL.

imagino que isso resolva seu problema.

qualquer duvida estamos aqui para te ajudar.

Viva William, Valeu.

Obrigado pela ajuda e disponibilidade.

Vou seguir o que você me sugeriu já tinha isso na cabeça só a minha dúvida será:

Eu já tenho uma Tabela Usuário, relaciono-a com uma Tabela_Acesso ou posso fazer isso mesmo na Tabela Usuário?

Link para o comentário
Compartilhar em outros sites

  • 0

Isto vai do que você quiser fazer se voce criar uma tabela como sugeri você automaticamente terá um log de acesso.

caso queira usar a propia tabela de usuario funcionará perfeitamente tb, você só não terá o log de acesso, mais sem problemas.

até mais abraço.

Link para o comentário
Compartilhar em outros sites

  • 0
Isto vai do que você quiser fazer se voce criar uma tabela como sugeri você automaticamente terá um log de acesso.

caso queira usar a propia tabela de usuario funcionará perfeitamente tb, você só não terá o log de acesso, mais sem problemas.

até mais abraço.

Criando uma outra tabela, caso o usuario log no sistema varias vezes num dia, como saberei como o faria para o sistema me dar a maquina atual?

Link para o comentário
Compartilhar em outros sites

  • 0

Isto é bem simples, vou te dar um exempolo em mysql e delphi que é o que estou mais abtuado

tabela

id |data |Maquina |hora | status |Usuario

1 |10/06/2009 | Servidor| 12:00:00 | 1 |William

2 |10/06/2009 | est001 | 13:00:00 | 1 |William

3 |10/06/2009 | est002 | 14:00:00 | 1 |William

4 |10/06/2009 | Servidor| 15:00:00 | 0 |William

o que eu faço na hora de entrar no sistema eu pesquisao apnas se a registro no mesmo dia com status 0 para o meu usuario assim

Select * from TABELA where data="10/06/2006" and usuario="william" ans status=0

este select me me retornara apenas o que esta em aperto

id |data |Maquina |hora | status |Usuario

4 |10/06/2009 | Servidor| 15:00:00 | 0 |William

então saberei que no servidor estou logado no meu nome.

caso não retorne nada não estou logado em lugar nem um.

qualquer coisa posta ai.

Link para o comentário
Compartilhar em outros sites

  • 0
Isto é bem simples, vou te dar um exempolo em mysql e delphi que é o que estou mais abtuado

tabela

id |data |Maquina |hora | status |Usuario

1 |10/06/2009 | Servidor| 12:00:00 | 1 |William

2 |10/06/2009 | est001 | 13:00:00 | 1 |William

3 |10/06/2009 | est002 | 14:00:00 | 1 |William

4 |10/06/2009 | Servidor| 15:00:00 | 0 |William

o que eu faço na hora de entrar no sistema eu pesquisao apnas se a registro no mesmo dia com status 0 para o meu usuario assim

Select * from TABELA where data="10/06/2006" and usuario="william" ans status=0

este select me me retornara apenas o que esta em aperto

id |data |Maquina |hora | status |Usuario

4 |10/06/2009 | Servidor| 15:00:00 | 0 |William

então saberei que no servidor estou logado no meu nome.

caso não retorne nada não estou logado em lugar nem um.

qualquer coisa posta ai.

William foi exatamente da forma que fiz, e acho até que fiz de forma mais completa:

TabAcesso

Id, Datam, hota, status, maquina, user

With qryacesso do

begin

close;

Sql.Clear;

Sql.Text:='select * from Tabacesso where user="geomar" order by Id';

open;

Last// último registo de geomar salvo na tabela

If Isempty then

begin

ConcedeAcesso //procedimento que criei

SalvaDadosEmAcesso;

end

else

If TabacessoStatus.Text='sim' then

begin

Showmessage('A sessão do utilizador está aberta em, '+ TabAcessomaquina.text)

Abort;

end

else

begin

ConcedeAcesso;

SalvaDadosEmAcesso;

end;

end;

e está a funcionar perfeitamente, e quando tiver de sair criei um procedimento Desconectautilizador o Evento Onclose do FormPrincipal.

Valeu,

Qualquer dica é só apitar

Abraços!

Link para o comentário
Compartilhar em outros sites

  • 0

Opa

Só uma opinião, se por acaso acontecer do sistema travar, a maquina travar e ter que reiniciar vai constar na tabela que o usuário está logado...

portanto, o que voce pode tambem é adicionar um timer no programa que escreva a data e hora em um campo desta mesma tabela a cada x minutos exemplo

a cada 5 minutos, ou seja, o timer com a propriedade para 300000, ele escreva no campo lastcheckh a Hora e lastcheckd o dia

assim quando um usuario for logar e retornar que esta logado, voce faz a comparacao de dias e da ultima hora checada.... se for maior do que uns 6 minutos significa que pode ter acontecido travamento ou se o dia for maior ou igual a 1

entendeu?

porque vamos supor,

Voce loga na Maquina A ok

A maquina trava ou cai a força, ou seja, o DesconectaUtilizador não vai ser chamado

A maquina reinicia e voce vai logar denovo...

PAM!

Voce já está logado! rs

entendeu?

espero que minha dica tenha sido útil e que eu não estou falando besteira na manhã deste feriado (ressaca) :blink:

ahuahuauha

abraxxx

Editado por Churc
Link para o comentário
Compartilhar em outros sites

  • 0
Opa

Só uma opinião, se por acaso acontecer do sistema travar, a maquina travar e ter que reiniciar vai constar na tabela que o usuário está logado...

portanto, o que voce pode tambem é adicionar um timer no programa que escreva a data e hora em um campo desta mesma tabela a cada x minutos exemplo

a cada 5 minutos, ou seja, o timer com a propriedade para 300000, ele escreva no campo lastcheckh a Hora e lastcheckd o dia

assim quando um usuario for logar e retornar que esta logado, voce faz a comparacao de dias e da ultima hora checada.... se for maior do que uns 6 minutos significa que pode ter acontecido travamento ou se o dia for maior ou igual a 1

entendeu?

porque vamos supor,

Voce loga na Maquina A ok

A maquina trava ou cai a força, ou seja, o DesconectaUtilizador não vai ser chamado

A maquina reinicia e voce vai logar denovo...

PAM!

Voce já está logado! rs

entendeu?

espero que minha dica tenha sido útil e que eu não estou falando besteira na manhã deste feriado (ressaca) :blink:

ahuahuauha

abraxxx

Churc a sua dica é útil demais cara, aliás já aconteceu num dos testes da aplicação, mas voce pode postar o código para executar essa rotina?

Link para o comentário
Compartilhar em outros sites

  • 0

Fala Geomar!

Então brother, eu escrevi escrevi escrevi e no fim de tudo cheguei a conclusao de há como burlar facilmente, basta alterar a data do computador que o usuário quer logar denovo...

Há outros meios usando Sockets, que fazem com que dois programas se comunicam em rede mas acho um tanto que complicado para isso...

de qualquer forma, segue a minha antiga idéia

...

vamos botar a cabeça pra funcionar hein hehe

você é bem inteligente, então vou dar os passos aqui e voce faz ok?

primeiro crie dois campos nesta mesma tabela de acessos, um para a Data e outro para a Hora

eu não sei que banco de dados voce usa e os esquemas dos campos então não sei te dizer o tipo do campo

um campo é referente a Data, vamos chamá-lo de "LastSeemDate" ou seja, última data visto...

o outro campo é referente a Hora, vamos chamá-lo então de "LastSeemTime", última hora em que foi visto...

a idéia é ter um timer da paleta System do Delphi no seu programa, na tela em que o usuário visualizará após ter logado no sistema, com o Interval para 300000 que equivale a 5 minutos, com a propriedade Enabled para True e no evento OnTimer deste timer, voce grava no banco de dados a Data e Hora atual

se quiser aumentar ou diminuir o tempo, faça 1000 x 60 x numero de minutos

Interval de 1000 = 1 segundo, x 60 igual a 1 minuto ou seja, para tres minutos faça na calculadora: 1000 x 60 x 3 e por ai vai, ai coloque o resultado na propriedade Interval do Timer...

Até aqui tudo certo, tudo que este timer irá fazer é ficar atualizando estes campos com a data e hora da última vez em que o usuário foi visto

Depois na parte em que voce checa se o usuário está logado na rede, voce tambem verifica a última data e hora que ele foi visto e compara com a data atual

uses

DateUtils;

... (seu codigo de verificar se o usuario esta logado)

if isEmpty then

if (LastSeemDate = Now) and (MinutesBetween(LastSeemTime, Time) <= 5) then

O usuario esta logado else

não esta então pode conceder acesso

entendeu?

porém é como falei, da pra burlar facilmente...

espero q alguém tenha outra idéia e se surgir alguma te dou um toque!

abrxx

Editado por Churc
Link para o comentário
Compartilhar em outros sites

  • 0
Fala Geomar!

Então brother, eu escrevi escrevi escrevi e no fim de tudo cheguei a conclusao de há como burlar facilmente, basta alterar a data do computador que o usuário quer logar denovo...

Há outros meios usando Sockets, que fazem com que dois programas se comunicam em rede mas acho um tanto que complicado para isso...

de qualquer forma, segue a minha antiga idéia

...

vamos botar a cabeça pra funcionar hein hehe

você é bem inteligente, então vou dar os passos aqui e voce faz ok?

primeiro crie dois campos nesta mesma tabela de acessos, um para a Data e outro para a Hora

eu não sei que banco de dados voce usa e os esquemas dos campos então não sei te dizer o tipo do campo

um campo é referente a Data, vamos chamá-lo de "LastSeemDate" ou seja, última data visto...

o outro campo é referente a Hora, vamos chamá-lo então de "LastSeemTime", última hora em que foi visto...

a idéia é ter um timer da paleta System do Delphi no seu programa, na tela em que o usuário visualizará após ter logado no sistema, com o Interval para 300000 que equivale a 5 minutos, com a propriedade Enabled para True e no evento OnTimer deste timer, voce grava no banco de dados a Data e Hora atual

se quiser aumentar ou diminuir o tempo, faça 1000 x 60 x numero de minutos

Interval de 1000 = 1 segundo, x 60 igual a 1 minuto ou seja, para tres minutos faça na calculadora: 1000 x 60 x 3 e por ai vai, ai coloque o resultado na propriedade Interval do Timer...

Até aqui tudo certo, tudo que este timer irá fazer é ficar atualizando estes campos com a data e hora da última vez em que o usuário foi visto

Depois na parte em que voce checa se o usuário está logado na rede, voce tambem verifica a última data e hora que ele foi visto e compara com a data atual

uses

DateUtils;

... (seu codigo de verificar se o usuario esta logado)

if isEmpty then

if (LastSeemDate = Now) and (MinutesBetween(LastSeemTime, Time) <= 5) then

O usuario esta logado else

não esta então pode conceder acesso

entendeu?

porém é como falei, da pra burlar facilmente...

espero q alguém tenha outra idéia e se surgir alguma te dou um toque!

abrxx

Churc,

Do que me deu para perceber desse Post, a ideia é verificar se o usuario está logado ou não?

Se sim, a minha ideia é saber como fazer o procedimento DesconectaUsuario dispare se eventualmente houver algo de anormal de termina com a aplicação bruscamente.

Link para o comentário
Compartilhar em outros sites

  • 0

Caro amigo para apenas marcar no sistema como não logado. é simples usando o exemplo que te dei em cima

id |data---------|Maquina-- |hora -----| status |Usuario

1 |10/06/2009 | Servidor--| 12:00:00| 1 -----|William

2 |10/06/2009 | est001 ---| 13:00:00 | 1 ------|William

3 |10/06/2009 | est002 ---| 14:00:00 | 1 ------|William

4 |10/06/2009 | Servidor--| 15:00:00| 0 ------|William

no select vai aprarecer que esta logado correto

4 |10/06/2009 | Servidor--| 15:00:00| 0 ------|William

ai é só você verificar se hora atual é maior que hora da tabela + 00:05:00 caso for de um update tabela set status=1 where status =0 e logar no sistema caso contrario de a menssagem "você esta logado na maquia tal".

para isso é só.

agora em questão de segurança como nosso amigo churc sitou, para resolver em partes basta você nunca pegar a hora do micro local e sim do servidor como uso mysql eu pego a hora do mysql, pois usuarios normais geralmente não tem acesso ao servidor, isto deve resolver.

qualquer coisa posta ai.

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      651,9k
×
×
  • Criar Novo...