Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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?
utilize onbeforeunload ao invés de unload.
Mais detalhes neste post:
>
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:
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;
}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:
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.
>
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:
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 ??
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:
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.
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.
>
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:
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.
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 ..
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()](http://www.php.net/manual/en/function.session-id.php);
>
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()](http://www.php.net/manual/en/function.session-id.php);
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 ?
complico rsrsrs...
Qual é a sua dúvida com a função?
>
Qual é a sua dúvida com a função?
me desculpe mais tenho todas ainda não consegui compre ender :/
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.
>
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 sessionO que você conseguiu implementar?
Dos códigos já passados, o que já foi testado?
>
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
Quando você cria a sessão do usuário, já deve salvá-la no banco de dados.
>
Quando você cria a sessão do usuário, já deve salvá-la no banco de dados.
Ta então quando crio a sesão eu guardo no banco o ID dela ou o Nome dela? com o email sei la ?
Você deve salvar o ID dela. O que você precisa salvar no SGBD é o seguind:
- Usuário;
- Status (online/offline);
Quando outro usuário conectar, procure pelos usuários online no SGBD, e busque a sessão deles. Caso uma sessão não existir para um usuário online, ele está OFF.
Também implemente a função para, ao fechar o navegador, mudar o seu status. Você deve efetuar uma requisição em AJAX para alterar o status dele no SGBD.
>
Você deve salvar o ID dela. O que você precisa salvar no SGBD é o seguind:
- Usuário;
- Status (online/offline);
Quando outro usuário conectar, procure pelos usuários online no SGBD, e busque a sessão deles. Caso uma sessão não existir para um usuário online, ele está OFF.
Também implemente a função para, ao fechar o navegador, mudar o seu status. Você deve efetuar uma requisição em AJAX para alterar o status dele no SGBD.
Sim mais como o navegador vai procurar no banco de dados o cliente of
ta salvo as
Sessions
Usuário
Status
a no painel do admin como ele vai saber se o usuario sail do chat?
Não é o navegador que deve buscar, é o servidor, através do PHP.
Do mesmo modo que você verifica os usuários que estão Online, você realizará a verificação das sessões.
Poste o que você tem pronto.
o que precisava realmente é uma função que quando fechar o navegador faça um update altomatico no banco
Quando você disse que implementou o um chat, eu acredito, ou ao menos espero, que você já possui um certo conhecimento.
Ao longo de todo esse tópico, há funções e exemplos com tudo o que você procura. Se você não tentar implementar, não vai conseguir.
Função que é executada quando o navegador é fechado:
Dentro dessa função, você deve utilizar uma requisição ajax, que pode ser através de(escolha um):
http://www.w3schools.com/ajax/default.asp
http://api.jquery.com/jQuery.ajax/
Com AJAX, você pode chamar um script, em PHP, que realizará o UPDATE no SGBD.
Você possui a faca e o queijo na mão, não há nem necessidade em suar a camisa, basta adaptar para a sua realidade.
Desculpe pela sinceridade, mas eu não quero acreditar que você não está tentando implementar ou pior, que você quer tudo pronto. A ideia do fórum, não é fazer por você, é mostrar o caminho e responder todas as suas dúvidas. Se você quiser aprender, este é o lugar certo. Caso quiser algo pronto, pode ser que alguém faça, mas esse não serei eu.
>
Quando você disse que implementou o um chat, eu acredito, ou ao menos espero, que você já possui um certo conhecimento.
Ao longo de todo esse tópico, há funções e exemplos com tudo o que você procura. Se você não tentar implementar, não vai conseguir.
Função que é executada quando o navegador é fechado:
Dentro dessa função, você deve utilizar uma requisição ajax, que pode ser através de(escolha um):
http://www.w3schools.com/ajax/default.asp
http://api.jquery.com/jQuery.ajax/
Com AJAX, você pode chamar um script, em PHP, que realizará o UPDATE no SGBD.
Você possui a faca e o queijo na mão, não há nem necessidade em suar a camisa, basta adaptar para a sua realidade.
Desculpe pela sinceridade, mas eu não quero acreditar que você não está tentando implementar ou pior, que você quer tudo pronto. A ideia do fórum, não é fazer por você, é mostrar o caminho e responder todas as suas dúvidas. Se você quiser aprender, este é o lugar certo. Caso quiser algo pronto, pode ser que alguém faça, mas esse não serei eu.
Meu código ta asim.
<script>
window.onbeforeunload = function() {
$(function($) {
var log_ID = $("#log_ID").val();
$.post('sai.php', {ID: '145'}, function(resposta) {
if (resposta != false) {
$("#status").html(resposta);
}else {
$("#status").html("Mensagem enviada com sucesso!");
$("#mensagens").prepend("<strong>"+ nome +"</strong> disse: <em>" + mensagem + "</em><br />");
}
});
});
}
</script>
Ta não mando de js mais esse ate deu certo o problema e que quando da um f5 na página ele executa a função nao teria como ser só quando fechar o navegador o geito que está ele ao fechar vai para página sai.php e faz o update de acordo com o ID que informei mais ao atualizar ele faz isso tambem
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.