+1

Passando, com segurança, a ID de um sessão no modo transparente

criado por Daniel Braga em 11/03/2004 11:20am
Para contornar este problema, podemos inserir o seguinte código em todas as páginas onde usaremos variáveis de sessão:

<?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

Comentários:

Mostrando 1 - 10 de 28 comentários
Vocês acham que é possível apagar o id da sessão mesmo depois de um session_destroy()?
29/07/2005 10:48am (~16 anos atrás)

Fiquei satisfeito com a solução apresentada no artigo, supriu minhas necessidades.

valeu
11/05/2004 12:15pm (~17 anos atrás)

Daniel Braga disse:
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.
30/04/2004 7:43am (~17 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
29/04/2004 10:16pm (~17 anos atrás)

Éder Baum disse:
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???
21/03/2004 3:53pm (~17 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.
17/03/2004 11:23am (~17 anos atrás)

Daniel Braga disse:

E você estava passando a ID da sessão na query string?
17/03/2004 7:55am (~17 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...
16/03/2004 3:11pm (~17 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
15/03/2004 8:38am (~17 anos atrás)

Jair Issa disse:
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..


14/03/2004 5:37pm (~17 anos atrás)

Novo Comentário:

(Você pode usar tags como <b>, <i> ou <code>. URLs serão convertidas para links automaticamente.)