Passando, com segurança, a ID de um sessão no modo transparente
Para contornar este problema, podemos inserir o seguinte código em todas as páginas onde usaremos variáveis de sessão:
O código acima inicia uma sessão. Se houver o parâmetro PHPSESSID (na URL ou em cookies) com uma ID de sessão válido como valor, a sessão atual será resumida.
É usada uma variável $sessiontime para controlar o período de validade da sessão. Assim, mesmo que um internauta use um endereço do bookmark com a ID da sessão na URL, o script verifica se $sessiontime é menor do que a hora atual menos $temposessao. Se for menor, a sessão não é mais válida e todas as variáveis da sessão são liberadas.
DICA: você pode colocar o código de validação de sessão em um arquivo separado e fazer um include() nas páginas necessárias.
NOTA: o código também valida uma ID de sessão que esteja armazenada em cookies.
Daniel Braga de Almeida
http://comentar.com.br
<?php $temposessao = 1200; // valor em segundos // inicia a sessão session_start(); // verifica se há a variável "sessiontime" if ($_SESSION["sessiontime"]) { // se há "sessiontime", verifica se ainda é válida if ($_SESSION["sessiontime"] < (time() - $temposessao)) { // se não for válida, libera todas as variáveis da sessão session_unset(); } } else { // se não há a variável "sessiontime", // libera todas as variáveis da sessão session_unset(); } // session time recebe um novo valor $_SESSION["sessiontime"] = time(); // agora sua sessão está pronta para receber novas variáveis ?>
O código acima inicia uma sessão. Se houver o parâmetro PHPSESSID (na URL ou em cookies) com uma ID de sessão válido como valor, a sessão atual será resumida.
É usada uma variável $sessiontime para controlar o período de validade da sessão. Assim, mesmo que um internauta use um endereço do bookmark com a ID da sessão na URL, o script verifica se $sessiontime é menor do que a hora atual menos $temposessao. Se for menor, a sessão não é mais válida e todas as variáveis da sessão são liberadas.
DICA: você pode colocar o código de validação de sessão em um arquivo separado e fazer um include() nas páginas necessárias.
NOTA: o código também valida uma ID de sessão que esteja armazenada em cookies.
Daniel Braga de Almeida
http://comentar.com.br
Páginas:
1
2
Vocês acham que é possível apagar o id da sessão mesmo depois de um session_destroy()?
29/07/2005 10:48am
(~19 anos atrás)
Fiquei satisfeito com a solução apresentada no artigo, supriu minhas necessidades.
valeu
valeu
11/05/2004 12:15pm
(~20 anos atrás)
Se você der unset ou destroy será quase a mesma coisa, mas com destroy vc terá que chamar session_start() novamente, sendo que nas duas situações a sessão continuará com a mesma ID e a sessão estará vazia
O propósito do código é exatamente este: se a sessão expirou, a aplicação deverá ter novos valores nas variáveis e que sejam válidos e seguros.
O propósito do código é exatamente este: se a sessão expirou, a aplicação deverá ter novos valores nas variáveis e que sejam válidos e seguros.
30/04/2004 7:43am
(~20 anos atrás)
OK Daniel,
Eu entendi, vamos supoter que o cara está navegando na minha sessão, fechou o browser, sendo assim não ativou o session_destroy, e o arquivo ficou no servidor.
Vamos supor que outro dia ele volter e use o session ID que estava na URL, ae o SEU código vai ver que o TIME expirou, ae nesse ponto, vc limpa as variaveis com o session_unset, mas ai todas as variaveis foram para o espaco e eu preciso delas pra continuar a aplicação, ou seja, vou ter que mandar o cara ir para o login, já não é melhor eu dar session_destroy???
Abraços,
Max
Eu entendi, vamos supoter que o cara está navegando na minha sessão, fechou o browser, sendo assim não ativou o session_destroy, e o arquivo ficou no servidor.
Vamos supor que outro dia ele volter e use o session ID que estava na URL, ae o SEU código vai ver que o TIME expirou, ae nesse ponto, vc limpa as variaveis com o session_unset, mas ai todas as variaveis foram para o espaco e eu preciso delas pra continuar a aplicação, ou seja, vou ter que mandar o cara ir para o login, já não é melhor eu dar session_destroy???
Abraços,
Max
29/04/2004 10:16pm
(~20 anos atrás)
Estou com um problema grave.
No meu site ao usuário cadastrar-se é enviado um email para confirmação de registro, até ai tudo bem. Porém descobri que se este email for do hotmail e o navegador for Explorer e ele clicar no link pelo servidor hotmail minha página vai abrir como um frame, e consequentemente o Explorer não vai aceitar cookies.
Tudo bem a solução seria passar o id da seção via URL, mas como meu sistema é enorme fica impossivel fcar caçando todos os links.
Existe algum meio de eu passar o ID da seção via URL por meio de uma função ou algo assim, e que isso se propague para todos os links???
No meu site ao usuário cadastrar-se é enviado um email para confirmação de registro, até ai tudo bem. Porém descobri que se este email for do hotmail e o navegador for Explorer e ele clicar no link pelo servidor hotmail minha página vai abrir como um frame, e consequentemente o Explorer não vai aceitar cookies.
Tudo bem a solução seria passar o id da seção via URL, mas como meu sistema é enorme fica impossivel fcar caçando todos os links.
Existe algum meio de eu passar o ID da seção via URL por meio de uma função ou algo assim, e que isso se propague para todos os links???
21/03/2004 3:53pm
(~20 anos atrás)
Não. O ponto que quis abordar não era bem esse... Visei a relação Cookie x Sessions, que pelos que testes que efetuei aqui, não apresentaram relações. Pelo que entendi do seu artigo, sem Cookies, Sessions não funcionam...
Desculpe-me se interpretei de maneira errônea seu artigo.
Desculpe-me se interpretei de maneira errônea seu artigo.
17/03/2004 11:23am
(~20 anos atrás)
Acessei as páginas administrativas que já tenho prontas. Excelente. Salvei a URL nos Favoritos e desabilitei os cookies. Reiniciei o navegador e tentei acessar... Acesso Negado, como já se esperava... Então... Fiz login e a session foi criada normalmente... =)
Testei no IE6 e Firefox... Ambos não apresentaram erros, nem efeitos inesperados...
Testei no IE6 e Firefox... Ambos não apresentaram erros, nem efeitos inesperados...
16/03/2004 3:11pm
(~21 anos atrás)
oi gente..to usando esse codigo q o daniel mandou ai pra gente..numa include...
na pagina q verifica o login...dou um echo na variavel de sessao q criei para o login e ele me mostra o login correto...
nessa mesma pagina..chamo uma funcao q ta em outra engina pra atualizar os dados do cara...e dou, dentro da funcao um outro echo na variavel de sessao do login e me mostra corretamente de nvo...
depois ainda na pagina que verifica o login...eu chamo a funcao url("home.php");
essa funcao nada mais é q um location.href em java script q eu fiz...
na pagina home.php eu dou um terceiro echo na variavel de sessao do loginname
ai ja aparece diferente...
meu login é girakrok..e aparece intranet...
alguem sabe pq isso acontece?
antes de cada echo eu to colocando a include com esse codigo da sessao...
[]´s
na pagina q verifica o login...dou um echo na variavel de sessao q criei para o login e ele me mostra o login correto...
nessa mesma pagina..chamo uma funcao q ta em outra engina pra atualizar os dados do cara...e dou, dentro da funcao um outro echo na variavel de sessao do login e me mostra corretamente de nvo...
depois ainda na pagina que verifica o login...eu chamo a funcao url("home.php");
essa funcao nada mais é q um location.href em java script q eu fiz...
na pagina home.php eu dou um terceiro echo na variavel de sessao do loginname
ai ja aparece diferente...
meu login é girakrok..e aparece intranet...
alguem sabe pq isso acontece?
antes de cada echo eu to colocando a include com esse codigo da sessao...
[]´s
15/03/2004 8:38am
(~21 anos atrás)
Bem eu nao uso Cookie.. somente Session
os unicos Dados eu que deveria armazenar em cookie seria o Idioma escolhido para o usuario, porem este estou armazenando na tabela de usuarios.
Os Sistemas que faço sao para empresas, nao um Forum.. e nao armazeno usuario e senha, para outra pessoa nao utilizar o nome de outro.
Mas normal.. é só verificar se esta ativo ou nao... e bola pra frente..
os unicos Dados eu que deveria armazenar em cookie seria o Idioma escolhido para o usuario, porem este estou armazenando na tabela de usuarios.
Os Sistemas que faço sao para empresas, nao um Forum.. e nao armazeno usuario e senha, para outra pessoa nao utilizar o nome de outro.
Mas normal.. é só verificar se esta ativo ou nao... e bola pra frente..
14/03/2004 5:37pm
(~21 anos atrás)