+2

Introdução a Sessions

criado por Marcelo Toscano em 29/04/2002 12:07am
As sessões funcionam da seguinte maneira - quando você loga no sistema (usuário e senha) você valida esse usuário verificando no banco de dados se ele existe ou não e validando os seus dados. Para fazer isso você acaba utilizando uma ou outra estrutura de controle e/ou de repetição e depois mostra aquela mensagem "Seja bem-vindo Fulano" e vai aproveitar para iniciar a sessão.

Era ai que eu queria chegar, muitas pessoas não entendem como ou quando iniciar uma sessão, o mais importande do que o "como" é o "quando" isso desse ser feito. A partir do momento que o seu programa se encontrar em um status em que você já fez todas as verificações necessárias e a partir deste momento o usuário já esta devidamente identificado (Estou falando dessa maneira porque estou voltado ao assunto de logon de logout, entrada e saída de usuário.).

Definido isto agora vamos para o conceito de como fazer, tudo começa com o session_start(), esta função do PHP cria uma nova sessão. Isto quer dizer que a partir deste momento o seu programa esta apto a registrar os dados da sessão (nome, outras variáveis da sessão, tamanho do cache, etc). Como não queremos complicar vamos nos manter somente nas variáveis da sessão.
O que veremos agora ?

Vamos aprender a registrar, desregistrar e destruir as variáveis da sessão. Para criar (registrar) uma variável de sessão utiliza-se a função session_resgister() mas antes disso deve-se criar uma variável normal no PHP e atribuí-la um valor. Veja abaixo:

<?php
$Cod_Ususario = "1234";
session_start();
// somente o 'nome' da variável, não a variável em si abaixo
session_register('Cod_Usuario');
?>

Feito isso você pode acessar a variável $Cod_Usuario de qualquer outro documento. Como fazer isso ?

Para isso utiliza-se a variável automática $HTTP_SESSION_VARS[], que é similar à $HTTP_POST_VARS[] e $HTTP_GET_VARS[], e funciona da mesma forma.

Uma outra coisa importante e muito útil é como saber se uma variável esta registrada ou não dentro de uma sessão. Veja abaixo como:

<?php
if (isset($HTTP_SESSION_VARS["Cod_Usuario"])) {
    echo "mostra tudo";
} else {
    header("location: www.toscano.com.br"); //redireciona para o meu site heheh :P
}
?>

Isso serve para que você não acesse um determinado arquivo antes de você passar pelo arquivo que registra a sessão, ou seja, você não vai poder acessar um arquivo (ou página) pelo seu caminho real dentro do servidor de web, por exemplo : "www.toscano.com.br/gerenciamento.php" sem antes passar pelo "www.toscano.com.br/login.php".

Entenderam ?

Você nao consegue acessar um arquivo antes que você esteja dentro da sessão, por isso você é obrigado a passar antes pelo login.

Bom feito isso só nos sobra desfazer a sessão utilizando o session_destroy() que destrói todos os dados de uma sessão ou o session_unregister() para desregistar uma variável de uma determinada sessão.

Bom é isso ai, eu não sou o dono da verdade nem tenho esta pretensão, portanto se encontrar alguma coisa errada ou que possa ser feita de uma maneira melhor, faça seu comentário abaixo.

[]'s
Marcelo Toscano
http://www.toscano.com.br

Comentários:

Mostrando 1 - 10 de 36 comentários
O erro estava lá no servidor, na configuração do php.ini e já foi solucionado.
21/07/2006 5:51am (~18 anos atrás)

Pessoal ...eu não consigo sequer iniciar a sessão. Vejam quando executo session_start() ( ele entre outro erros) apresenta a seguinte linha:

Warning: Unknown: Failed to write session data (files). Please verify that the current setting of session.save_path is correct (C:\Program Files\php\sessiondata) in Unknown on line 0

Por favor, esclareçam este erro. Eu tenho que colocar o php.ini no meu diretório, lá no servidor?

Ajudaria se configurassem passo a passo.


19/07/2006 7:08am (~18 anos atrás)

cara... usei o código acima pra fechar a minha sessão mas não desgrava a sessão existente nem a pau!

Se eu volto pra página de login, sem fechar a janela, e faço o login com outro usuário, a sessão continua gravada com o usuário anterior!

Oq tenho q fazer????? HELP!!!
19/07/2006 3:44am (~18 anos atrás)

Crie um arquivo php com estas descrições e faça um link direcionado a ele...

<?
session_destroy();
echo "<META HTTP-EQUIV=REFRESH CONTENT=\"0;
URL=index.php\">";
?>
17/11/2005 10:01am (~18 anos atrás)

Como faço para q o php de um reset na sessão. quero fazer com q ele de um reset na sessão onde estão armazenadas os dados do login. para q faça um logout e retorne para a pagina de login. qual eh o comando para zerar a sessão.
21/10/2005 6:51pm (~18 anos atrás)

A sessao esta funcionando corretamente como eu faço para ver todas as sessoes abertas e listar todos os usuarios logado.

Quando eu gravo a senha no MySql uso a seguinte forma usuario, senha vaules ('$usuario', 'password('$pass')');.... legal cadastra a senha codificada no BD, mas na hora de recuperar a senha, para um usuario que esqueceu, ela esta voltando codificada...
Como faço?
09/08/2004 5:29pm (~19 anos atrás)

Aprendi como alterar (valendo para o meu script):
Quer mudar o nome PHPSESSID:
ini_set("session.name","Usuario");
O estranho é que vem o cookie com o nome novo e o antigo PHPSESSID também ???
Ver:
http://www.php.net/manual/pt_BR/function.ini-set.php

Abraços
14/01/2003 7:23am (~21 anos atrás)

Tava desenvolvendo Sessions com a abstração da adodb que tem modulo para sessions, mas tinha que mudar no php.ini de files para user (session.save_handler) e aí não deu, não tenho controle sobre o server.
Queria fugir da autenticação pelo browser, que funciona bem = $PHP_AUTH_USER e $PHP_AUTH_PW, no servidor, para uma tela própria, mas a página para a qual redireciono fica estranha, hora acessa e hora não. Acho que o sid não está habilitado no server.
Alguém pode dar uma luz porque isso ocorre?
Não testei com a PHPLIB porque não sei se precisaria alterar coisas no server que não tenho controle.
13/01/2003 11:30pm (~21 anos atrás)

Não existe a pasta tmp em seu computador.Ou cria ela ou modifica ela no php.ini ,setando para uma pasta existente no seu computador.
10/01/2003 9:54pm (~21 anos atrás)

Véi, vc tah registrando a variável denovo, na segunda página. Quando vc faz isso a variávl zera, mas tah registrada. Na segunda página não registre a variável, pois ela vai estar na sessão, bota feh?
16/08/2002 12:00pm (~22 anos atrás)

Novo Comentário:

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