Aula 02 - Cookies e sessões
O protocolo HTTP é stateless ou seja não guarda
informações do estado anterior da sessão.
Os cookies são informações que podem armazenar dados de navegação do usuário para utilização posterior. O navegador permite armazenar até 4kb de dados.
Não podemos simplesmente armazenar cookies no cliente, pois esses dados são sensíveis, e pertencem ao cliente. Quando trabalhamos com PHP no backend trabalhamos com sessões que mantém os dados no servidor e geram o cookies que ficam do lado do cliente. Desse modo os cookies são demonstrados como chaves de caracteres e os dados propriamente ditos ficam no servidor.

Os cookies são informações que podem armazenar dados de navegação do usuário para utilização posterior. O navegador permite armazenar até 4kb de dados.
Não podemos simplesmente armazenar cookies no cliente, pois esses dados são sensíveis, e pertencem ao cliente. Quando trabalhamos com PHP no backend trabalhamos com sessões que mantém os dados no servidor e geram o cookies que ficam do lado do cliente. Desse modo os cookies são demonstrados como chaves de caracteres e os dados propriamente ditos ficam no servidor.
Aula 03 - Trabalhando com cookies
Para criarmos cookies no PHP utilizamos a função
setcookie() que recebe pelo menos tres
parametros: nome, valor,
tempo_expiração. O
tempo_expiração pode ser definido com a função
time() que recupera a hora atual somado com o
tempo em segundos que desejamos que o
cookie fique ativo.
time() + (3600 * 24 * 365 * 99)
Esse é o método utilizado em configurações do tipo Lembrar de mim.
Para recuperar os dados de um cookie utilizamos a variável global $_COOKIE que retorna um array com os dados.
Podemos remover um cookie passando um valor null no valor ou setando um tempo_expiração negativo.

setcookie('nome', 'valor', time() + (60 *
10)
Os dados de expiração são obrigatórios e podem ser
setados para um tempo bastante alto, por exemplo,
utilizando a fórmula: time() + (3600 * 24 * 365 * 99)
Esse é o método utilizado em configurações do tipo Lembrar de mim.
Para recuperar os dados de um cookie utilizamos a variável global $_COOKIE que retorna um array com os dados.
Podemos remover um cookie passando um valor null no valor ou setando um tempo_expiração negativo.
Aula 04 - Criando sessões
Quando desejamos tratar cookies com dados sensíveis que
não devem ser acessados pelo usuário devemos criar uma
sessão.
As sessões devem ser criadas no ponto mais alto do arquivo PHP, logo no início do código. Iniciamos a sessão com a função session_start().
Após a criação da sessão podemos enviar os dados a serem gravados no cookie com a variável $_SESSION. Passamos os valores da seguinte forma:

As sessões devem ser criadas no ponto mais alto do arquivo PHP, logo no início do código. Iniciamos a sessão com a função session_start().
Após a criação da sessão podemos enviar os dados a serem gravados no cookie com a variável $_SESSION. Passamos os valores da seguinte forma:
$_SESSION['chave'] = 'valor';
Os dados serão salvos nos cookies do usuário na
forma de uma chave criptografada. Já no lado do servidor
podemos definir o local de gravação dos dados da sessão
com a função session_save_path(). Nela passamos
como parametro o caminho onde devem ser gravados os
arquivos da sessão:
session_save_path(__DIR__.'./diretorio'
O arquivo gerado tem os dados gerados pelo cookie de
forma serializada. Resumindo o processo completo temos:
session_save_path(__DIR__ . "../sessions");
session_start();
$_SESSION['meunome'] = 'JeanSession';
O arquivo gerado com esse comando terá o seguinte
conteudo: session_start();
$_SESSION['meunome'] = 'JeanSession';
meunome|s:11:"JeanSession";
Aula 05 - Manipulando os dados na sessão
Para recuperarmos os dados persistidos em uma sessão em
outra página utilizamos a variável $_SESSION.
Para que essa variável retorne os valores precisamos
iniciar a sessão na página que recebe os dados também
com a função session_start().
Entretanto quando encerramos o navegador os dados não são recuperados pela página que os recebeu sem que antes tenhamos iniciado a sessão que envia os dados.
Podemos utilizar a função unset() para apagar os dados armazenados na variável. Por exemplo: unset($_SESSION['variavel']). UIm exemplo de utilização é colocar o unset() após o var_dump() na variável. Com isso recuperamos o valor uma vez e limpamos a variável.

Entretanto quando encerramos o navegador os dados não são recuperados pela página que os recebeu sem que antes tenhamos iniciado a sessão que envia os dados.
Podemos utilizar a função unset() para apagar os dados armazenados na variável. Por exemplo: unset($_SESSION['variavel']). UIm exemplo de utilização é colocar o unset() após o var_dump() na variável. Com isso recuperamos o valor uma vez e limpamos a variável.
Aula 06 - Destruindo sessão
Podemos apagar todos os dados da sessão com a função
session_destroy(). Essa função apaga todos os
valores da variável $_SESSION.
Podemos criar vários dados no array da variável $_SESSION e podemos remover apenas alguns selecionando individualmente com o unset(), ou passando um valor null para o índice da variável.
A função session_destroy() apaga todo o conteúdo.

Podemos criar vários dados no array da variável $_SESSION e podemos remover apenas alguns selecionando individualmente com o unset(), ou passando um valor null para o índice da variável.
A função session_destroy() apaga todo o conteúdo.
Aula 07 - Exemplo prático login básico
Criamos tres arquivos o index.php que srá a
página logada, o login.php e o logout.php.
Todos os arquivos recebem a função
session_start().
No arquivo index.php fazemos um teste na variável de sessão $_SESSION['user'] com o null coalescing e caso não exista valor na variável encaminha para a página login.php. Para fazer esse encaminhamento utilizamos a função header() (não estudada ainda) utilizando como parametro location: login.php. Desse modo caso não exista valor em $_SESSION['user'] direcionamos para a página login.php.
A página login.php primeiramente faz o teste se o método é POST. Caso true recuperamos o valor do <input> com o valor do nome de usuário (no nosso exemplo name='email'). Podemos recuperar esse valor de duas formas: atribuindo o valor diretamente utilizando a super variável $_POST['valor'] ou utilizando a função filter_input(INPUT_POST, 'valor').
Existindo valor na variável chamamos novamente a página index.php com a função header().

No arquivo index.php fazemos um teste na variável de sessão $_SESSION['user'] com o null coalescing e caso não exista valor na variável encaminha para a página login.php. Para fazer esse encaminhamento utilizamos a função header() (não estudada ainda) utilizando como parametro location: login.php. Desse modo caso não exista valor em $_SESSION['user'] direcionamos para a página login.php.
A página login.php primeiramente faz o teste se o método é POST. Caso true recuperamos o valor do <input> com o valor do nome de usuário (no nosso exemplo name='email'). Podemos recuperar esse valor de duas formas: atribuindo o valor diretamente utilizando a super variável $_POST['valor'] ou utilizando a função filter_input(INPUT_POST, 'valor').
Existindo valor na variável chamamos novamente a página index.php com a função header().
Aula 08 a 09 - Configurações e segurança de sessões /
Session handler
Aqui vamos utilizar um parametro chamado
session_set_cookie_params(). Primeiramente
criamos um arquivo session.php que deve ser
referenciado em todos os arquivos que tenham uma sessão
na aplicação. Para isso devemos substituir o
session_start() pela linha a seguir:
No arquivo session.php incluimos o parametro session_set_cookie_params() que recebe 5 parametros:
tempo de vida da sessão: definido em segundos;
path: caminho de leitura do cookie (por padrão /);
domínio: domínio onde o cookie pode ser acessado (por padrão null);
sessão segura: só permite que o cookie seja acessado em sessões 'https' (true ou false);
httponly: só permite que o cookie seja acessado pelo http.
Com essas configurações é possível manter a coexão pelo tempo definido no lifetime. Se esse tempo for setado para 0, a nova sessão iniciará pela tela de login. Já se for setado para um tempo maior durará o tempo definido.
Na última aula foi feita uma explicação sobre como alterar a configuração para armazenar a sessão no SQLite, porém não há suporte para o Windows.
Criamos, dessa forma, uma instrução para armazenar a sessão em um arquivo com a rotina:

require __DIR__ . './session.php';
No arquivo session.php incluimos o parametro session_set_cookie_params() que recebe 5 parametros:
tempo de vida da sessão: definido em segundos;
path: caminho de leitura do cookie (por padrão /);
domínio: domínio onde o cookie pode ser acessado (por padrão null);
sessão segura: só permite que o cookie seja acessado em sessões 'https' (true ou false);
httponly: só permite que o cookie seja acessado pelo http.
Com essas configurações é possível manter a coexão pelo tempo definido no lifetime. Se esse tempo for setado para 0, a nova sessão iniciará pela tela de login. Já se for setado para um tempo maior durará o tempo definido.
Na última aula foi feita uma explicação sobre como alterar a configuração para armazenar a sessão no SQLite, porém não há suporte para o Windows.
Criamos, dessa forma, uma instrução para armazenar a sessão em um arquivo com a rotina:
ini_set('session.save_handler', 'files');
ini_set('session.save_path', __DIR__ . './sessions');
Com isso temos os dados gravados em um arquivo como
demonstrado na
Aula 04
ini_set('session.save_path', __DIR__ . './sessions');