Olá Pessoal,
É eu sei, estou em dívida com os posts de quarta e sexta-feira. Mas tive uma infecção brava, e não consegui chegar perto do PC para postar o conteúdo. Então para compensá-los, vou postar o conteúdo que faltou no sábado e domingo. Assim não atrasamos a programação de segunda.
Essa é a última parte do nosso minicurso (na verdade a penúltima, pois a última fala sobre PHP e MySQL, porém esses foram os primeiros posts do blog). Vale lembrar que esse minicurso visa apresentar os fundamentos do PHP, é a base necessária para que muitos de vocês entendam os próximos tutoriais do blog. Assim sendo, todo o conteúdo aqui é voltado para quem nunca viu nada da linguagem, ou está começando a programar agora (exatamente o perfil de alunos que encontro nos cursos técnicos que ministro lá no SENAC). Portanto, se você ficou frustrado com algum tópico e achou que eu explorei pouco, lembro que a idéia é ser o mais básico possível, de maneira a introduzir o leigo nos pormenores da arte de programar. Bem, o assunto dessa última parte do curso são as famosas SESSÕES. Com elas poderemos montar carrinhos de compras, sistemas de login e autenticação de usuário etc. Portanto, estudem com afinco.
O que é sessão?
A sessão ou session nos permite passar dados de uma página para outra, sem que haja perda de informação ou necessidade usar os métodos POST ou GET. Cada visitante ao acessar o site recebe um identificador único, a ser propagado via URL ou armazenado em um cookie na máquina do usuário. Podemos declarar inúmeras variáveis e associá-las a sessão do usuário, criando ambientes personalizados para cada usuário do nosso site. Para não dificultar a compreensão do conceito, vamos assumir que as variáveis de sessão ficarão armazenadas na sessão do usuário enquanto o seu navegador continuar aberto, ou enquanto a mesma não for encerrada (seja por inatividade, ou por intermédio de alguma função própria para esse fim). Uma vez encerrada, as variáveis de sessão não eliminadas.
Uma sessão é iniciada pela função session_start(), a ser colocada no topo da página, antes de qualquer outro código. Veja o exemplo abaixo:
1
2
3
4
| <?php
session_start();
//Resto do código.... <html>...</html>
?> |
Salvo em alguns casos especiais, sempre usaremos a função session_start() no início da página e antes de qualquer outro código. O que essa função faz é habilitar o uso de todas as variáveis de sessão dentro da página onde foi chamada, ou seja, dizemos ao PHP que essa página poderá fazer uso de variáveis de sessão e funções para gerenciamento da mesma. Toda sessão pode expirar por inatividade, pois possui algo chamado “tempo de vida” definido em 180 minutos, por padrão. Se precisarmos alterar o tempo de vida de uma função podemos fazer uso de funções específicas como session_cache_expire(), a serem estudadas mais a frente.
Array $_SESSION
Ok! Já entendemos o que é uma sessão, como iniciá-la e para o que ela serve, agora vamos descobrir como armazenar dados na sessão. Todas as informações gravadas em sessão ficam armazenadas em uma variável superglobal definida pelo próprio PHP, chamada $_SESSION. Trata-se de um array onde, uma vez iniciada a sessão, temos acesso aos seus campos e podemos adicionar campos novos. Veja o exemplo abaixo:
LOGIN.PHP
1
2
3
4
5
| <form action="validaLogin.php" method="post" id="form" name="form">
<label for="login">Login: <input type="text" name="login" id="login" /></label>
<label for="senha">Senha: <input type="password" name="senha" id="senha" /></label>
<button type="submit">LOGIN</button>
</form> |
VALIDALOGIN.PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
| <?php
//INICIO A SESSÃO
session_start();
$login = array("user01", "user02", "user03", "user04", "user05");
$senha = array("senha01", "senha02", "senha03", "senha04", "senha05");
//Calculo o tamanho do array $login
$tamArray = count($login);
//Crio uma variável auxiliar
$msg = FALSE;
//Uso um loop para percorrer o array
for ($i = 0; $i < $tamArray; $i++) {
if ($_POST["login"] == $login[$i] && $_POST["senha"] == $senha[$i]) {
$msg = TRUE;
break;
}
}
//Verifico se a variável auxiliar $msg saiu do loop com o valor TRUE (indicando login efetuado com sucesso)
if ($msg) {
//Armazeno duas informações na sessão do usuário: se ele está logado, e o login de acesso. A partir desse momento, qualquer página habilitada a trabalhar com variáveis de sessão, poderá resgatar essas variáveis, manipulá-las, sobreescrevê-las etc.
$_SESSION["logado"] = TRUE;
$_SESSION["user"] = $_POST["login"];
//Uso a função header() para fazer o redirecionamento para a página principal do site, uma vez que o login foi executado com sucesso
header ("Location: home.php");
}
else {
//Caso o login dê errado, devolvo o usuário para a página de login
header ("Location: login.php");
}
?> |
A única novidade no script acima é o uso da função header() que, dentre outras coisas, permite o redirecionamento do usuário de uma página para outra. Bem, vimos que esse script funciona em três tempos: o usuário entra com os dados de login na página LOGIN.PHP, esses dados são recebidos e tratados em VALIDALOGIN.PHP e, em caso de sucesso armazenamos dois dados em variáveis de SESSÃO, caso contrário devolvemos o usuário para a tela de login. Já sabemos como armazenar dados na sessão do usuário, agora veremos como resgatá-los. Ao redirecionar o usuário para a página HOME.PHP, devemos verificar se ele de fato está logado no sistema. Sabemos disso através da variável de sessão $_SESSION["logado"], se ela existir e seu valor for TRUE, é porque o usuário fez login e senha corretamente. Vamos ao código:
HOME.PHP
1
2
3
4
5
6
7
8
9
10
11
12
| <?php
//INICIO A SESSÃO
session_start();
//Verifico se o usuário está logado no sistema
if (!isset($_SESSION["logado"]) || $_SESSION["logado"] != TRUE) {
header("Location: login.php");
}
else {
echo "<h1>Seja bem-vindo, ".$_SESSION["user"]."</h1>";
}
?> |
Viram? Basta iniciar session_start() e todas as variáveis de sessão declaradas em qualquer lugar da aplicação, estarão disponíveis na página de chamada. Maneiro, né? A novidade do script acima fica por conta da função isset(), que verifica se uma variável existe e, em caso afirmativo retorna TRUE, caso contrário retorna FALSE. E aí, gostaram do uso de sessões? Já conseguem imaginar algumas brincadeiras para se fazer com elas? Amanhã falamos das principais funções envolvendo o uso de sessões. Até lá.
Abraços,
Diego.