Propagação de Sessões e Autenticação de Usuários no MySQL
Com os dados já cadastrados em nossa tabela, está na hora de fazer a consulta para verificar se a sessão de nosso usuário já passou pelo login ou não.
Este script deve ser utilizado no começo de cada script, logo após a parte da sessão. Assim, sempre poderemos consultar se o usuário está logado ou não.
No script acima apago da tabela todos os registros que estejam com o unixtime abaixo do tempo valido. Assim não sobra lixo na tabela. Verifico então se a sessão está registrada com algum usuário e, se tiver, faço o update do unixtime para ter mais tempo antes do registro se auto-remover. Defino também 2 variáveis - a $online['logado'] com valor 'sim' que deve ser consultada sempre que for necessário verificar se aquela sessão já foi validada e também a variável $online['cliente_id'] que serve para saber qual é o cliente que está logado.
Desta maneira é possivel ter sua sessão propagada e ainda com autenticação. Assim você poderá ter páginas mais dinâmicas e desenvolver portais, se quiser.
Para fazer o logout quando o cliente clicar no botao 'Logout' faça a seguinte rotina:
Assim, quando o botão logout for pressionado, os dados da tabela online serão removidos, e a variável $online['logado'] tera o valor 'não'. O script saberá que aquela sessão não está mais logada.
É isso! Espero ter ajudado. Não sei se fui claro em minhas explicações, mas se necessário for, estou aqui para ajudar!
Um abraço,
Vinicius
Este script deve ser utilizado no começo de cada script, logo após a parte da sessão. Assim, sempre poderemos consultar se o usuário está logado ou não.
<?php // ... // ... $tempo_valido = 5; // numero de minutos que a sessão // ficara válida sem que o usuário // continue navegando pelo site $unixtime_valido = strtotime('NOW') - ($tempo_valido * 60); $sql = "DELETE FROM online WHERE unixtime < '$unixtime_valido';"; $query = mysql_query($sql); $sql = "SELECT * FROM online WHERE sessao='$_ID' AND unixtime > '$unixtime_valido';" $query = mysql_query($sql); if (mysql_num_rows($query) > 0) { $row = mysql_fetch_array($query); $online['logado'] = "sim"; $online['cliente_id'] = $row['cliente_id']; $unixtime = strtotime('NOW'); $sql = "UPDATE online SET unixtime='$unixtime' WHERE sessao='$_ID';"; $query = mysql_query($sql); } else { $online['logado'] = "nao"; } // ... // ... ?>
No script acima apago da tabela todos os registros que estejam com o unixtime abaixo do tempo valido. Assim não sobra lixo na tabela. Verifico então se a sessão está registrada com algum usuário e, se tiver, faço o update do unixtime para ter mais tempo antes do registro se auto-remover. Defino também 2 variáveis - a $online['logado'] com valor 'sim' que deve ser consultada sempre que for necessário verificar se aquela sessão já foi validada e também a variável $online['cliente_id'] que serve para saber qual é o cliente que está logado.
Desta maneira é possivel ter sua sessão propagada e ainda com autenticação. Assim você poderá ter páginas mais dinâmicas e desenvolver portais, se quiser.
Para fazer o logout quando o cliente clicar no botao 'Logout' faça a seguinte rotina:
<?php // ... // ... $sql = "DELETE FROM online WHERE sessao = '$_ID';"; $query = mysql_query($sql); session_destroy(); // ... // ... ?>
Assim, quando o botão logout for pressionado, os dados da tabela online serão removidos, e a variável $online['logado'] tera o valor 'não'. O script saberá que aquela sessão não está mais logada.
É isso! Espero ter ajudado. Não sei se fui claro em minhas explicações, mas se necessário for, estou aqui para ajudar!
Um abraço,
Vinicius
??
31/05/2005 10:56am
(~19 anos atrás)
gostei do script e estou utilizando ele atualmente, mas estou com um pequeno problema quando uso o firefox, estou com impressão as janelas do navegador compartilham váriaveis de sessão, pois quando efetuo o login em uma janela, outras janelas conseseguem acessar paginas privilegiadas, diferentemente do internet explorer, que nao perimite. Desta forma, tem como eu monitorar quando uma janela é fechada para destruir a sessão.
31/05/2005 10:44am
(~19 anos atrás)
Pessoal,
Como eu posso fazer pra propagar uma sessão por URL (cookies desabilitados) por formulário???
por exemplo: pra propagar a sessão qd a pessoa está sendo direcionada pelas páginas por link ou redirecionamento eu faço assim:
...
?>
<a href=xxx.php?<?php SID?>></a>
<?php
....
O ID da sessão passa e eu tenho acesso normal à sessão.
Até aí td bem...
mas como eu faço pra propagar o SID através de um formulário??
Isso funcionaria:
...
?>
<form method=get action=exemplo.php?<?php SID?>>
<?php
...
E se funciona, eu tenho que usar method get?
Outra coisa: Usando BD postgres, os scripts desse artigo também funcionam? fazendo-se, claro, as devidas modificações qt a forma de acessar o BD e manipula-lo (mudando mysql_num_rows para pg_num_rows, p.e.). Isto é, a idéia é a mesma, né?
Como eu posso fazer pra propagar uma sessão por URL (cookies desabilitados) por formulário???
por exemplo: pra propagar a sessão qd a pessoa está sendo direcionada pelas páginas por link ou redirecionamento eu faço assim:
...
?>
<a href=xxx.php?<?php SID?>></a>
<?php
....
O ID da sessão passa e eu tenho acesso normal à sessão.
Até aí td bem...
mas como eu faço pra propagar o SID através de um formulário??
Isso funcionaria:
...
?>
<form method=get action=exemplo.php?<?php SID?>>
<?php
...
E se funciona, eu tenho que usar method get?
Outra coisa: Usando BD postgres, os scripts desse artigo também funcionam? fazendo-se, claro, as devidas modificações qt a forma de acessar o BD e manipula-lo (mudando mysql_num_rows para pg_num_rows, p.e.). Isto é, a idéia é a mesma, né?
29/01/2005 4:06pm
(~20 anos atrás)
Poder vc até pode. Mas ai tem 2 coisas. Os cookies ficam armazenados no servidor por um periodo pequeno de tempo (configurado) e no computador do cliente. O do computador não iria te servir pra nada, a nao ser para conseguir a ID da sessão. Com o id da sessão, vc poderia conseguir abrir a sessão do outro, mas somente entrando praticamente juntos (depende do tempo da sessão). É complicado fazer isso, e, se não me engano, o php já possui proteções para esse tipo de coisa. Ai é só testando mesmo!
[]s
Vinicius
[]s
Vinicius
07/09/2004 11:06pm
(~20 anos atrás)
Caro Vinicius
Eu não posso simplesmente copiar o teu cookie enquanto vc está logado e entrar no sistema com o teu usuário?
Eu não posso simplesmente copiar o teu cookie enquanto vc está logado e entrar no sistema com o teu usuário?
07/09/2004 10:54pm
(~20 anos atrás)
Para vc tirar os cookies de sua sessão, vc deve mecher em seu php.ini ou então setar o valor com o comando ini_set (se o servidor permitir).
O que vc deve setar é a variavel session.use_cookies como 0 (zero). Assim ele não mais utilizará cookies em suas transções de sessão.
O problema disso tudo, eu acho e me corrijam se eu estiver errado, é que você não poderá mais setar variaveis como $_SESSION[var] pq não terá aonde salvar esses valores. Ai, só passando os dados pelo metodo get.
O php acima de 4.2 já vem com o --enable-trans-sid. Isso significa que, se vc não tiver utilizando os cookies, ele já faz essa transação. Caso contrário, é vc passar o valor como:
<a href="pagina.php?<?= strip_tags(SID); ?>">Link</a>
Espero ter ajudado.
[]s
Vinicius
O que vc deve setar é a variavel session.use_cookies como 0 (zero). Assim ele não mais utilizará cookies em suas transções de sessão.
O problema disso tudo, eu acho e me corrijam se eu estiver errado, é que você não poderá mais setar variaveis como $_SESSION[var] pq não terá aonde salvar esses valores. Ai, só passando os dados pelo metodo get.
O php acima de 4.2 já vem com o --enable-trans-sid. Isso significa que, se vc não tiver utilizando os cookies, ele já faz essa transação. Caso contrário, é vc passar o valor como:
<a href="pagina.php?<?= strip_tags(SID); ?>">Link</a>
Espero ter ajudado.
[]s
Vinicius
05/09/2004 11:18am
(~20 anos atrás)
Utilizei session_start(); para criar sessões em um sistema seguro. Mesmo enviando por post o id da sessão o PHP sempre cria dois cookie PHPSESSID um com o id da sessao e outro com o endereco onde está sendo executado o script.Como faço para inibir esta criação de cookie e ao mesmo tempo propagar a seção? É possível?
04/09/2004 12:43pm
(~20 anos atrás)
O seu sistema esta otimo, adorei, eu meu site eu fiz um eu mesmo muito parecido, com tempo de login e tudo, e quanto ao id ser seguro ou não, é correto, mesmo que reinicie o server, vc nunca tera um id igual, é como uma chave unica do server, atualmente é a unica coisa em que confio pra um login
21/10/2003 6:51pm
(~21 anos atrás)
Olá Ricardo,
Obrigado pelo elogio. Quanto a sua dúvida acredito que não teremos este tipo de problema uma vez que até onde eu conheco, o session id tem, como um dos parametros para sua formação, o unixtime do sistema (que é unico!). Se estiver errado por favor me corrija.
Obrigado pelo elogio. Quanto a sua dúvida acredito que não teremos este tipo de problema uma vez que até onde eu conheco, o session id tem, como um dos parametros para sua formação, o unixtime do sistema (que é unico!). Se estiver errado por favor me corrija.
11/10/2003 9:10pm
(~21 anos atrás)
Gostaria de elogiar o artigo, realmente está muito bom. Mas tenha uma dúvida:
Não é perigoso utilizar o session id? Se o servidor for reiniciado, o id pode não ser único. Causa problemas de segurança e consistência.
Não é perigoso utilizar o session id? Se o servidor for reiniciado, o id pode não ser único. Causa problemas de segurança e consistência.
10/10/2003 6:47pm
(~21 anos atrás)