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

Contador De User On Line Em C#


FernandoGomes

Pergunta

Bao tarde pessoal, eu to precisando mostar o numero de usuarios on line, coisa simples,

então pensei em algo como

Session.Add("UsersOnLine", ValorDaSessao);

if (Session["UsersOnLine"] != null)

lblOnLineUsers.Text = Session["UsersOnLine"].ToString();

ai ele me mostra no label(lblOnLineUsers) o ValordaSessao,

beleza so que como eu faco para que a varialvel ValorDaSessao seja o numero de usuarios on line ?

Agradeco desde já a atencao de todos

abracos, FernandoGomes.

Link para o comentário
Compartilhar em outros sites

8 respostass a esta questão

Posts Recomendados

  • 0
Movendo para .NET.

Graymalkin

:$

foi mal =)

Sem problemas. :)

Agora, quanto à sua dúvida, acho que você deveria usar o objeto Application e não o Session, uma vez que este segundo é criado para cada usuário que acessa o site, enquanto que o primeiro serve para todos. No caso, no evento Start do objeto Session você deveria incrementar um valor na variável que estaria no objeto Application. Bom, eu realmente não mexo com ASP.NET, mas acho que esta é a idéia.

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0
Movendo para .NET.

Graymalkin

:$

foi mal =)

Sem problemas. :)

Agora, quanto à sua dúvida, acho que você deveria usar o objeto Application e não o Session, uma vez que este segundo é criado para cada usuário que acessa o site, enquanto que o primeiro serve para todos. No caso, no evento Start do objeto Session você deveria incrementar um valor na variável que estaria no objeto Application. Bom, eu realmente não mexo com ASP.NET, mas acho que esta é a idéia.

Abraços,

Graymalkin

cara foi isso msmo vlw

vou (ou pelo menos tentar ) explicar como eu fiz....

Bom primeiro precisamos de um arquivo Global.asax

Se você não tem um clica com o direito, vai em ADD NEW ITEM e adciona um GLOBAL APPLICATION CLASS

Pronto ! Temos um global.asax

Legal, neste arquivo de configuração temos os seguintes metodos que iremos usar, Application_Start, Session_Start, Session_End.

no Application_Start, vamos colocar a seguinte linha de codigo:

void Application_Start(object sender, EventArgs e)

{

Application.Add("numberUser", 0);

}

Bom agora temos uma variavel de aplicação com o nome numberUser e com o valor 0 Ok ?!

Certo !

Agora precisamos que a cada nova sessão, ou seja, a cada novo usuario na página esse valor 0 se incrementado a + 1.

Faremos isso da seguinte maneira:

No Session_Start vamos colocar o seguinte codigo:

void Session_Start(object sender, EventArgs e)

{

int numberUser = (int)Application["numberUser"] + 1;

Application["numberUser"] = numberUser;

}

Pros mais novatos que nem eu devem estar se perguntando, "Qui Diabos é isso :S", calma,

eu tambem fiz essa pergunta ( ou sera qui so eu fiz essa pergunta ?! :P ), é simples:

Quando uma nova sessão for iniciada ( void Session_Start(object sender, EventArgs e) )

uma variavel do tipo inteiro chamada de numberUser ( int numberUser )

vai ter o valor inteiro da variavel de aplicação chamada de numberUser + 1 ( (int)Application["numberUser"] + 1; )

esse (int) na frente do application converte para um inteiro.

Beleza, então até aqui temos o seguinte:

Temos uma variavel la em cima dentro do Application_Start chamada de numberUser com o valor 0.

E mais em baixo declaramos uma variavel do tipo inteiro com o nome de numberUser e que vai ter o valor de

Application["numberUser"] + 1, ou seja,

Se a minha variavel de aplicação for igual a 1 quando uma nova sessão for iniciada o valor da variavel int numberUser vai ser 2 certo ?

Ainda tá complicado né... Pelo menos eu não entenderia direito ainda ( as vezes ainda me atrapalho hauihau )

Vamos pensa um poquinhu, Eu tenho a variavel de aplicação que é igual a 1.

Ai eu to dizendo dentro do metodo Session_Start pra que quando uma nova sessão iniciar, ou seja, um novo usuario entrar, ele pegue aquele valor armazenado lá na minha variavel de aplicação ( que agente está supondo que é 1 ) e some com + 1.

Resultado 2. Então o int numberUser = 2. Ficou moleza agora né ? =)

Beleza. Agora vamos ver o que nos diz a terceira linha.

Application["numberUser"] = numberUser;

:huh:

Não é tão dificil vai....

pensa um poquinhu ...

=)

Isso ai, tá ficando facil entender essas coisas né ?!

Mas vamos ao que intereça. Lembra da nossa ultima conclusão onde int numberUser era igual a 2.

Intão eu to falando para que agora o valor da variavel de aplicação seja o valor da variavel int numberUser ( que no momento é 2 ).

Blah mamão com açucar né ?

Agora vamos para o mais facil. ( Mais facil que isso ?! É !! :P )

Bom, Temos o valor das Sessões iniciadas e somadas que nos da o valor de usuarios online ok ?!

Intão beleza, agora precisamos mostrar isso =)

Facil facil !!!

Bom o que precisamos ?

1 Label.

É é so um simples label ( só lembrando que tem que ser do conjunto Standart de componentes, e não do conjunto html ok ?! ) Bom se já temos um label vamos mostrar o valor que queremos mostrar nele. Para isso é simples:

Na página ( default.aspx por exemplo ) temos o metodo Page_Load que executa os codigos no carregamento da pagina, beleza

dentro dele vamos por o que tem que aparecer no label ( que no meu caso eu coloquei o nome do label de lblOnLineUsers o .Text que vem depois do nome do label significa que eu estou falando sobre a propriedade texto do label ou seja no que eu quero que o valor do texto do label seja ) o codigo o seguinte :

protected void Page_Load(Object sender, System.EventArgs e)

{

lblOnLineUsers.Text = Application["numberUser"].ToString();

}

O que significa ?

Facim rsrs, to dizendo que o a propriedade texto ( como já dito o .Text ) do label lblOnLineUsers é igual ao valor da variavel de aplicação numberUser ( Application["numberUser"] ), beleza até ai acho que todo mundo já está entendendo, mas e o ToString();

bom, estamos concatenando o valor da variavel de aplicação numberUser ao valor de um Label certo, então temos que converter o valor da variavel de aplicação para uma string, dai o comnado .ToString() os () é porque ele é um metodo, então precisa de parametros, que vão dentro do parenteses, enfim.

Bom desculpa vo corre um poquinhu agora pra termina de explica porque apareceu um problema aqui que eu tenho que resolver agora.

Estamos esquecendo que quando o usuario encerra a sessão seja decrementado um numero da variavel de aplicação certo ?!

ok vamos usar a seguinte linha de codigo no arquivo global.asax no metodo Session_End:

void Session_End(object sender, EventArgs e)

{

int numberUser = (int)Application["numberUser"] - 1;

Application["numberUser"] = numberUser;

}

Fica assim, acho que não está dificil de entender né ?

bom eu tenho que ir desculpa ter corrido um pouco no final ...=/

vou revisar assim que possivel e esclarecer qualquer coisa que eu tenha escrito errado ou explicado mau, pessoas não coloquei esse codigo aqui com a intenção de vim 500 pessoas pegar o codigo e nem se da o trabalho de ver que o postou, coloquei com a intenção de que pessoas como eu tenha a oportunidade de entender detalhadamente como funciona, não sei vocês mas eu precisei de uma informação assim para poder entender e agora por meio deste forum passo a vocês, façam bom proveito.

Abraços,

FernandoGomes

tirolo_power_art@hotmail.com

Link para o comentário
Compartilhar em outros sites

  • 0

Muito legal sua explicação....

Porém ficou uma dúvida.. se puder ajudar...

Abro a página em 3 computadores... e aparecem 3 usuários online, mas se eu fechar e página em um pc a página continua com 3 usuários online.... se se abrir a página de novo nesse pc.... irá aparecer com 4 usuários online... ou seja, ele não consegue limpar o usuario que fecha a página.... não executa Session_End...

Fiz exatamente como você explicou... o que pode estar ocorrendo??

O que preciso fazer para conseguir executar o que está no Session_End??

Se puder ajudar agradeço....

Att

Link para o comentário
Compartilhar em outros sites

  • 0

Olá!

Muito bom! Muito obrigado!

Demorei encontrar um global.asax em linguagem C#, pois a maioria eram em VB.Net... a linguagem da qual não gosto..

Funcionou direitinho, valeu! :D

Abraços, Expert.

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,1k
    • Posts
      651,8k
×
×
  • Criar Novo...