Propagação de Sessões e Autenticação de Usuários no MySQL
Com seu banco de dados criado, chegou a hora de fazer o login. Não descreverei neste artigo como verificar se o login ou senha digitado está correto ou não. Considerarei os dados já válidos.
É importante que, ao começar qualquer script trabalhando-se com sessões, deve-se ter as funções para se "pegar" o id da sessão:
Da maneira acima, sempre que precisar do ID da sessão, você terá pela variável $_ID.
Vamos supor que a variável que recebe o login seja 'login'. Uma vez submetido os dados, procuraremos na tabela de clientes o ID referente ao login em questão.
No script acima, conseguimos o ID da tabela 'clientes' referente ao login feito. Vamos agora inserir os dados que temos na nossa tabela online:
Isto deve ser colocado no seu script de autenticação, para que logo após ter os dados verificados, já se faça a inserção dos mesmos na tabela 'online'.
Alguns de vocês podem estar se perguntando porque não utilizei o campo UNIXTIME do próprio mysql para guardar o valor da variável $unixtime. Eu faço isto pelo costume, mas independente da maneira, o importante é ter o unixtime em sua tabela. Será com este dado que faremos o "logout forçado" de quem não apertar para fazer o logout. Explicarei melhor isto na próxima página.
É importante que, ao começar qualquer script trabalhando-se com sessões, deve-se ter as funções para se "pegar" o id da sessão:
<?php session_start(); $_ID = session_id(); // ... // ... ?>
Da maneira acima, sempre que precisar do ID da sessão, você terá pela variável $_ID.
Vamos supor que a variável que recebe o login seja 'login'. Uma vez submetido os dados, procuraremos na tabela de clientes o ID referente ao login em questão.
<?php // ... // ... $sql = "SELECT * FROM clientes WHERE login='$_POST[login]';"; $query = mysql_query($sql); $row = mysql_fetch_array($query); $cliente_id = row[id]; // ... // ... ?>
No script acima, conseguimos o ID da tabela 'clientes' referente ao login feito. Vamos agora inserir os dados que temos na nossa tabela online:
<?php // ... // ... $unixtime = strtotime('NOW'); $sql = "INSERT INTO online (cliente_id, sessao, unixtime) VALUES ('$cliente_id', '$_ID', '$unixtime');"; $query = mysql_query($sql); // ... // ... ?>
Isto deve ser colocado no seu script de autenticação, para que logo após ter os dados verificados, já se faça a inserção dos mesmos na tabela 'online'.
Alguns de vocês podem estar se perguntando porque não utilizei o campo UNIXTIME do próprio mysql para guardar o valor da variável $unixtime. Eu faço isto pelo costume, mas independente da maneira, o importante é ter o unixtime em sua tabela. Será com este dado que faremos o "logout forçado" de quem não apertar para fazer o logout. Explicarei melhor isto na próxima página.
??
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)