Ir para conteúdo

POWERED BY:

Arquivado

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

Rafael Antonio da Silva

aterar status ao fechar navegador

Recommended Posts

Boa tarde,

Bom o sistema que estou fazendo é atendimento online e a duvida é

o usuário digita nome e email na entrada do atendimento nisso o sistema cria uma session e tal.. E cadastra esse usuário no banco e o status vai como 1 ,,,,, se ele clicar em SAIR quebra a session e altera o banco para 0 ate ai tudo bem mas como faço para quando o cara fechar o navegador ou se por acaso caia a energia e desligue o pc altere automaticamente o banco pois se ele clica em sair ele faz up-date mas se fecha o navegador como possa fazer isto?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Colega, procure pelo método unload(), em alguns navegadores pode dar errado, sugiro que você realize uma rotina de verificação utilizando JQuery , desta forma se o PC do usuário não responder trate como chat encerrado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

utilize onbeforeunload ao invés de unload.

 

Mais detalhes neste post:

http://forum.imasters.com.br/topic/473366-atualizar-pagina-pai-ao-fechar-popup/page__view__findpost__p__1879910

Compartilhar este post


Link para o post
Compartilhar em outros sites

Colega, procure pelo método unload(), em alguns navegadores pode dar errado, sugiro que você realize uma rotina de verificação utilizando JQuery , desta forma se o PC do usuário não responder trate como chat encerrado.

e como posso fazer esta verificação com jquery?

 

utilize onbeforeunload ao invés de unload.

 

Mais detalhes neste post:

http://forum.imasters.com.br/topic/473366-atualizar-pagina-pai-ao-fechar-popup/page__view__findpost__p__1879910

neste topico no caso ao fechar a pagina no caso o cara feche o navegador antes de fechar ele vai da um reflesh na pagina serto?

mas se ele der reflesh como vou fazer para ele fazer um update no banco com este script

 

window.onbeforeunload = function (event) {

var message = 'Realmente deseja sair??';

if (typeof event == 'undefined') {

event = window.event;

}

if (event) {

event.returnValue = message;

}

return message;

}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vejo que você não testou o código passado, simplesmente leu o outro tópico. Sendo que a função do código passado é bem outra, e não realiza nenhum refresh.

 

window.onbeforeunload = function (event) {} 

O código acima é o que você. O que você colocar dentro dele, é o que será executado quando fechar o navegador. Sua principal saída é, executar uma requisição(ajax) para alterar o status.

 

window.onbeforeunload = function (event) {
   /** código para requisição assíncrona(ajax) **/
} 

 

Você possui duas maneiras, mais conhecidas, de fazer uma requisição assíncrona:

- XMLHttpRequest Object (tradicional);

- jQuery(o mais fácil).

 

Outra maneira, é verificar se a sessão do usuário não existe mais. Por exemplo:

Você concorda que o status só precisa ser passado para offline quando um outro usuário quiser ver quem está online/offline. Certo? Se ninguém vê, nenhum status necessita estar atualizado.

 

Uma sessão não é nada mais que um arquivo txt gravado em disco. Se você possui no banco de dados que o usuário está online, você pode salvar o id da sessão dele, e depois procurar a session através da função session_save_path(). Se o arquivo, que está previamente cadastrado no banco de dados, não existir mais, o usuário está off.

 

Inatividade também pode ser utilizada para isso, alguns chats consideram timeout de 3 ou 5 minutos, passado esse tempo de inatividades, são considerados offline.

 

Na construção de um chat, eu não utilizaria apenas uma validação. Javascript ainda não é 100% confiável, ainda mais com a possibilidade de "matar um processo", ai mesmo que nenhum javascript será executado. O uso de validação por sessão, pode ser bem confiável, dependendo da implementação.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vejo que você não testou o código passado, simplesmente leu o outro tópico. Sendo que a função do código passado é bem outra, e não realiza nenhum refresh.

 

window.onbeforeunload = function (event) {} 

O código acima é o que você. O que você colocar dentro dele, é o que será executado quando fechar o navegador. Sua principal saída é, executar uma requisição(ajax) para alterar o status.

 

[

) {

/** código para requisição assíncrona(ajax) **/

}

[/code]

 

Você possui duas maneiras, mais conhecidas, de fazer uma requisição assíncrona:

- XMLHttpRequest Object (tradicional);

- jQuery(o mais fácil).

 

Outra maneira, é verificar se a sessão do usuário não existe mais. Por exemplo:

Você concorda que o status só precisa ser passado para offline quando um outro usuário quiser ver quem está online/offline. Certo? Se ninguém vê, nenhum status necessita estar atualizado.

 

Uma sessão não é nada mais que um arquivo txt gravado em disco. Se você possui no banco de dados que o usuário está online, você pode salvar o id da sessão dele, e depois procurar a session através da função session_save_path(). Se o arquivo, que está previamente cadastrado no banco de dados, não existir mais, o usuário está off.

 

Inatividade também pode ser utilizada para isso, alguns chats consideram timeout de 3 ou 5 minutos, passado esse tempo de inatividades, são considerados offline.

 

Na construção de um chat, eu não utilizaria apenas uma validação. Javascript ainda não é 100% confiável, ainda mais com a possibilidade de "matar um processo", ai mesmo que nenhum javascript será executado. O uso de validação por sessão, pode ser bem confiável, dependendo da implementação.

 

 

Bom você poderia me dar um exemplo de como seria com a função session_save_path(). ???

 

ou com window.onbeforeunload = function ??

Compartilhar este post


Link para o post
Compartilhar em outros sites

Antes de tudo:

http://forum.imasters.com.br/topic/375800-orientacoes-para-uma-boa-participacao/

Lembre-se que o fórum é composto por voluntários que também possuem seus próprios problemas. Não espere uma resposta imediata, muitas vezes um membro que pode ter a solução para seu problema ainda não leu sua dúvida.

Sua última resposta, é o oposto do que está escrito acima.

 

Aos códigos:

 

onbeforeunload():

O que foi passado, por si só, já é um exemplo. Por algum motivo acredito que, novamente, você não tenha testado.

Vamos a um mais simples então:

<html>
   <head>
       <script>
           window.onbeforeunload = function() {
               alert('você está saindo dessa página');
           } 
       </script>
   </head>
   <body>
   </body>
</html>

Basta agora, você implementar o seu código para executar as alterações necessárias.

 

session_save_path():

Vamos ao princípio de tudo, o manual:

session_save_path()

Get and/or set the current session save path

Retorna e/ou define o atual caminho (físico) aonde as sessões são salvas.

 

Sessions não são nada mais que arquivos textos gravados em discos. Esses arquivos textos possuem apenas uma peculiaridade. Todos eles possuem o prefixo "sess_", seguido do ID da sessão.

 

session_id()

Get and/or set the current session id

Retorna e/ou define o nome da sessão atual.

 

Sem mais, é isso. Retorna o nome e/ou define o nome da sessão atual.

Nota: O arquivo de sessão é salvo ao término de execução do script.

 

Quando você criar a sessão, e tentar buscar em disco, nada irá existir. Entretanto, quando atualizar a página, a sessão estará salva.

 

Faça um teste básico:

session_start();
session_id( 'teste5' );
$_SESSION['zzzz'] = 'valor de teste';

echo '<pre>';
var_dump( $_SERVER['DOCUMENT_ROOT'].session_save_path().'/' );
var_dump( glob( session_save_path().'/*' ) );
$session = file_get_contents( session_save_path().'/sess_'.session_id() );

var_dump( $session );
echo '</pre>';

Você visualizará todas as sessões existentes. Basta agora, quando um usuário se logar no sistema, recupere o ID da sessão, e salve-o no banco de dados junto com o status "online" dele. Quando outro usuário conectar, verifique se as sessões salvas no banco de dados estão ativas ainda. O resto é simples funcionalidade do sistema.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Antes de tudo:

http://forum.imasters.com.br/topic/375800-orientacoes-para-uma-boa-participacao/

 

Sua última resposta, é o oposto do que está escrito acima.

 

Aos códigos:

 

onbeforeunload():

O que foi passado, por si só, já é um exemplo. Por algum motivo acredito que, novamente, você não tenha testado.

Vamos a um mais simples então:

<html>
   <head>
       <script>
           window.onbeforeunload = function() {
               alert('você está saindo dessa página');
           } 
       </script>
   </head>
   <body>
   </body>
</html>

Basta agora, você implementar o seu código para executar as alterações necessárias.

 

session_save_path():

Vamos ao princípio de tudo, o manual:

session_save_path()

 

Retorna e/ou define o atual caminho (físico) aonde as sessões são salvas.

 

Sessions não são nada mais que arquivos textos gravados em discos. Esses arquivos textos possuem apenas uma peculiaridade. Todos eles possuem o prefixo "sess_", seguido do ID da sessão.

 

session_id()

 

Retorna e/ou define o nome da sessão atual.

 

Sem mais, é isso. Retorna o nome e/ou define o nome da sessão atual.

Nota: O arquivo de sessão é salvo ao término de execução do script.

 

Quando você criar a sessão, e tentar buscar em disco, nada irá existir. Entretanto, quando atualizar a página, a sessão estará salva.

 

Faça um teste básico:

session_start();
session_id( 'teste5' );
$_SESSION['zzzz'] = 'valor de teste';

echo '<pre>';
var_dump( $_SERVER['DOCUMENT_ROOT'].session_save_path().'/' );
var_dump( glob( session_save_path().'/*' ) );
$session = file_get_contents( session_save_path().'/sess_'.session_id() );

var_dump( $session );
echo '</pre>';

Você visualizará todas as sessões existentes. Basta agora, quando um usuário se logar no sistema, recupere o ID da sessão, e salve-o no banco de dados junto com o status "online" dele. Quando outro usuário conectar, verifique se as sessões salvas no banco de dados estão ativas ainda. O resto é simples funcionalidade do sistema.

 

 

 

Ta obrigado pelos tok rsrsrs e pela paciencia :/

 

mais to quase entendendo ... bom primeiro este código que me passou (ultimo) fisso o teste e ele me retornou no navegador isto




string 'D:/wamp/www/D:/wamp/tmp/' (length=24)

array
 0 => string 'D:/wamp/tmp/sess_9c0o7tj1o46ttahoo51idl0sk6' (length=43)
 1 => string 'D:/wamp/tmp/sess_hjdn5fu3rgasp65fnkc1o2gpb5' (length=43)
 2 => string 'D:/wamp/tmp/sess_teste5' (length=23)
 3 => string 'D:/wamp/tmp/session_dir' (length=23)

string 'log_data|s:19:"2012/08/30-14:08:15";log_hora|s:8:"14:08:15";log_ip|s:9:"127.0.0.1";log_email|s:28:"rafael@grupomegaperes.com.br";log_nome|s:14:"Rafael Antonio";log_ID|i:108;TESTE|s:14:"valor de teste";' (length=201)

 

Bom la em baixo eu reparei que me retorno as sessão criadas no meu navegador que no caso foi quando loguei beleza.. mas como eu salvaria ela no banco de dados ? qual paremetro deveria realmente pegar;;

bom ate ai beleza eu loguei e este script pega a sessão que criou ai salvo no banco com os dados do cara serto? e depois como faria para desativar ela do banco bom isso é otro caso primero a de cima rsrrsrs desculpe o encomodo mais e qui não sei mesmoo e tambem desculpa a preça anterior rsrsrs vou aguarda resopsta sempreça valeu pela força ..

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você já não salva no banco de dados que "Usuário X está online"?

 

Para o fluxograma, seria mais ou menos isso:

- Eu entro no chat;

- É criada a sessão;

- Recupere o nome da sessão através da função session_id();

- Salve no banco de dados que o usuário "Gabriel Heming" está logado pela sessão retornada na função session_id().

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você já não salva no banco de dados que "Usuário X está online"?

 

Para o fluxograma, seria mais ou menos isso:

- Eu entro no chat;

- É criada a sessão;

- Recupere o nome da sessão através da função session_id();

- Salve no banco de dados que o usuário "Gabriel Heming" está logado pela sessão retornada na função session_id().

 

dei um echo no session_id() retornou isto "batjfa3dborhv9dufsm630p577" ISTO SERIA O ID que vou cadastrar beleza.. mais depois para saber se tem este id ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Qual é a sua dúvida com a função?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fale sobre as suas dúvidas, mostre o que você já fez.

Será mais fácil de entender do que eu lhe encher de códigos e funções.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fale sobre as suas dúvidas, mostre o que você já fez.

Será mais fácil de entender do que eu lhe encher de códigos e funções.

 

 

Ta asim o atendimento que estou criando (tentando) rsrsrs. tem a janela do cliente e tem a do admin, a do cliente tem o botão sair que quando clikado ele faz um update no banco e muda o status para "off line", nisso o painel do admin tera que sumir auele cliente ou seja estar "off", até ai ta tranquilo

o que quero fazer e o seguinte quando o "cliente" fechar o navegador "não clicou em sair" simplismente fechou queria que aparecesso off line" desse um update no banco como posso fazer isto, ? o cliente fica pendurado pela session

Compartilhar este post


Link para o post
Compartilhar em outros sites

O que você conseguiu implementar?

 

Dos códigos já passados, o que já foi testado?

Compartilhar este post


Link para o post
Compartilhar em outros sites

O que você conseguiu implementar?

 

Dos códigos já passados, o que já foi testado?

 

 

a função para verificar o id da session ele me retornou todas as sessions criada mais nao sei como armazenar no banco para utilizar e como faz para fechar o navegador e alterar o status no banco

Compartilhar este post


Link para o post
Compartilhar em outros sites

Quando você cria a sessão do usuário, já deve salvá-la no banco de dados.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

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