Como definir sessão no Codeigniter com exemplo
Gerenciamento de sessão CodeIgniter
Se você já desenvolveu aplicativos desktop antes disso, provavelmente sabe que pode definir uma variável global, atribuir um valor a ela e utilizá-la durante todo o ciclo de vida da aplicação abrindo e fechando mais de uma (1) e cada solicitação terá acesso a a variável global.
Em outras palavras, o estado do aplicativo é mantido. Isso quer dizer que se, ao fazer login, você definir o nome da empresa como uma variável global, mesmo depois de fechar o formulário de login, o estado do nome da empresa será preservado.
HTTP funciona um pouco diferente do cenário acima que acabamos de descrever. É apátrida. Isto é, digamos que tudo o que você faz em uma solicitação não persevera na próxima solicitação. T
o contornar esse problema. Temos duas (2) soluções em PHP. Podemos trabalhar com cookies que são pequenos arquivos colocados no computador do usuário ou trabalhar com sessões que são semelhantes aos cookies, mas que são armazenadas no servidor e têm maior capacidade que os cookies.
Quando usar sessões?
As sessões geralmente são úteis quando você deseja conhecer as atividades do usuário de uma página para outra. Por exemplo, digamos que você tenha uma área protegida no site. Os usuários não precisam fazer login em cada página. Você pode permitir que o usuário faça login uma vez e armazene seus detalhes em uma variável de sessão e reutilize os mesmos dados em solicitações futuras. Outros casos de uso incluem quando se trabalha em um sistema de compras e o usuário precisa adicionar itens ao carrinho de compras.
Alternativamente, o CodeIgniter também utiliza sessões para disponibilizar os dados apenas uma vez na próxima solicitação. Isso é útil, você pode editar e atualizar um registro de banco de dados e deseja retornar algum feedback ao usuário quando ele for redirecionado para outra página.
Envio de mensagens Flash para outras páginas com sessões de CI
Nesta seção, você aprenderá como enviar mensagens flash para outras páginas usando a biblioteca de sessões no CodeIgniter
Crie um novo arquivo SessionController em
application/controllers/SessionController.php
Adicione o seguinte código
<?php defined('BASEPATH') OR exit('No direct script access allowed'); class SessionController extends CI_Controller { public function __construct() { parent:: __construct(); $this->load->helper('url'); $this->load->library('session'); } public function index() { $this->load->view('sessions/index'); } public function flash_message(){ $this->session->set_flashdata('msg', 'Welcome to CodeIgniter Flash Messages'); redirect(base_url('flash_index')); } }
AQUI,
- class SessionController estende CI_Controller {…} define a classe SessionController e estende a classe do controlador pai.
- função pública __construct() {…} define o método construtor que inicializa a classe pai e carrega o auxiliar de url e a biblioteca de sessão.
- public function index() {…} define o método de índice de sessão que carrega a visualização do índice de sessão.
- função pública flash_message(){…} define o método de mensagem flash que define os dados flash e então redireciona para a rota flash_index
Vamos agora criar a visualização que exibirá o valor dos dados da sessão.
Crie uma nova sessão de diretório em application/views
Crie um novo arquivo index.php em application/views/sessions
Adicione o seguinte código
<html> <head> <title>Code Igniter Flash Session</title> </head> <body> <p>The session value of msg is <b> <?=$this->session->userdata('msg');?> </b></p> </body> </html>
AQUI,
session->userdata('msg');?> recupera o valor dos dados da sessão com a chave de msg e os exibe no navegador.
Vamos agora criar as rotas para nosso método flash de sessão
Abra application/config/routes.php
Adicione as seguintes linhas
$route['flash_index'] = 'session controller'; $route['flash_message'] = 'session controller/flash_message';
Vamos agora iniciar o servidor integrado para PHP e teste nossas mensagens flash
Abra o terminal
Execute o seguinte comando
cd C:\Sites\ci-app php -S localhost:3000
AQUI,
O comando acima navega até o diretório do código do aplicativo e inicia o servidor integrado na porta 3000.
Nota: o caminho do aplicativo deve corresponder ao caminho onde você baixou o CodeIgniter, e você pode usar qualquer número de porta que esteja livre em seu computador. Não é necessário usar a porta 3000.
Carregue o seguinte URL em seu navegador: http://localhost:3000/flash_message
Você será redirecionado para o seguinte URL e obterá os seguintes resultados: http://localhost:3000/flash_index
Clique no botão atualizar do seu navegador ou pressione F5
Agora você obterá os seguintes resultados
Armazenando dados do usuário em sessões de CI
Vejamos agora um exemplo um pouco mais avançado. Para simplificar, simularemos a autenticação do usuário e não faremos a implementação real da verificação do cadastro do usuário no banco de dados e da senha enviada.
Vamos começar com as rotas
Abra rotas.php localizado em application/config
Adicione as seguintes rotas
$route['login'] = 'sessioncontroller/login'; $route['authenticate'] = 'sessioncontroller/authenticate'; $route['settings'] = 'sessioncontroller/settings'; $route['dashboard'] = 'sessioncontroller/dashboard'; $route['logout'] = 'sessioncontroller/logout';
AQUI,
- $route['login'] = 'sessioncontroller/login'; define a rota que exibe o formulário de login
- $route['authenticate'] = 'sessioncontroller/autenticar'; define a rota que simula o login bem-sucedido do usuário e define os dados de login da sessão.
- $route['settings'] = 'sessioncontroller/settings'; define uma página protegida que só deve ser acessível a usuários logados
- $route['dashboard'] = 'sessioncontroller/dashboard'; define uma página protegida que só deve ser acessível a usuários logados.
- $route['logout'] = 'sessioncontroller/logout'; desconecta o usuário destruindo os dados da sessão
Vamos agora atualizar o SessionController
Abra application/controllers/SessionController.php
Adicione os seguintes métodos
public function check_auth($page) { if (!$this->session->userdata('logged_in')) { $this->session->set_flashdata('msg', "You need to be logged in to access the $page page."); redirect('login'); } } public function login() { $this->load->view('sessions/login'); } public function authenticate() { $this->session->set_userdata('username', 'John Doe'); $this->session->set_userdata('logged_in', TRUE); redirect(base_url('dashboard')); } public function dashboard() { $this->check_auth('dashboard'); $this->load->view('sessions/dashboard'); } public function settings() { $this->check_auth('settings'); $this->load->view('sessions/settings'); } public function logout() { $this->session->unset_userdata('username'); $this->session->unset_userdata('logged_in'); redirect(base_url('login')); }
AQUI,
- public function check_auth($page) {…} define o método que verifica se o usuário está logado e permite acesso à página. Se um usuário não estiver conectado, ele será redirecionado para a página de login com uma mensagem flash.
- public function login() {…} carrega a visualização de login localizada no diretório de sessões.
- public function authenticate() {…} define os dados do usuário da sessão para as chaves logado_in e nome de usuário. NOTA: Não estamos verificando nenhum detalhe de login no banco de dados. Estamos simplesmente assumindo que os detalhes enviados estão corretos e definimos os dados da sessão.
- public function dashboard() {…} carrega a página do painel após chamar $this->check_auth('dashboard'); que verifica se a chave de sessão logada_in está definida.
- public function settings() {…} carrega a página de configurações que também está protegida
- public function logout() {…} destrói os dados da sessão e desconecta o usuário. O método também redireciona para a página de login
Visualizações de sessão do CodeIgniter
Crie as seguintes visualizações em application/views/sessions
- painel.php
- login.php
- settings.php
Adicione o seguinte código ao dashboard.php
<!DOCTYPE html> <html> <head> <title>Dashboard</title> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bulma/0.7.2/css/bulma.min.css"> </head> <body> <div class="container"> <div class="column"> <nav class="navbar" role="navigation" aria-label="main navigation"> <div id="navbarBasicExample" class="navbar-menu"> <div class="navbar-start"> <a href="<?= site_url('dashboard')?>" class="navbar-item is-active">Dashboard</a> <a href="<?= site_url('settings')?>" class="navbar-item">Settings</a> </div> <div class="navbar-end"> <div class="navbar-item has-dropdown is-hoverable"> <a class="navbar-link"><?=$this->session->userdata('username');?></a> <div class="navbar-dropdown"> <a class="navbar-item">My Profile</a> <hr class="navbar-divider"> <a class="navbar-item">Sign out</a> </div> </div> </div> </div> </nav> <h3>Welcome Page</h3> </div> </div> </body> </html>
AQUI,
session->userdata('username');?> exibe o nome de usuário que definimos no método de autenticação
Adicione o seguinte código ao login.php
<!DOCTYPE html> <html> <head> <title>Login</title> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bulma/0.7.2/css/bulma.min.css"> </head> <body> <div class="container"> <div class="column"> <p><?=$this->session->userdata('msg');?></p> <form method="post" action="<?= site_url('authenticate')?>"> <div class="field"> <label class="label">Username</label> <div class="control"> <input class="input" type="text" placeholder="Text input"> </div> </div> <div class="field"> <label class="label">Password</label> <div class="control"> <input class="input" type="passport" placeholder="Text input"> </div> </div> <div class="field is-grouped"> <div class="control"> <button class="button is-success">Login</button> </div> </div> </form> </div> </div> </body> </html>
AQUI,
O formulário de login é enviado para autenticar a rota.
Adicione o seguinte código em settings.php
<!DOCTYPE html> <html> <head> <title>Settings</title> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bulma/0.7.2/css/bulma.min.css"> </head> <body> <div class="container"> <div class="column"> <nav class="navbar" role="navigation" aria-label="main navigation"> <div id="navbarBasicExample" class="navbar-menu"> <div class="navbar-start"> <a href="<?= site_url('dashboard')?>" class="navbar-item">Dashboard</a> <a href="<?= site_url('settings')?>" class="navbar-item">Settings</a> </div> <div class="navbar-end"> <div class="navbar-item has-dropdown is-hoverable"> <a class="navbar-link">Jim Jones</a> <div class="navbar-dropdown"> <a href="#" class="navbar-item">My Profile</a> <hr class="navbar-divider"> <a href="<?= site_url('logout')?>" class="navbar-item">Sign out</a> </div> </div> </div> </div> </nav> <h3>Settings Page</h3> </div> </div> </body> </html>
É isso para os nossos pontos de vista. Vamos agora testar nossa aplicação.
Neste tutorial, estamos usando o servidor web PHP integrado, mas você pode usar qualquer servidor web que suporte PHP.
Abra o terminal
Execute o seguinte comando
cd C:\Sites\ci-app php -S localhost:3000
AQUI,
O comando acima navega até o diretório do código do aplicativo e inicia o servidor integrado na porta 3000.
Nota: o caminho do aplicativo deve corresponder ao caminho onde você baixou o CodeIgniter, e você pode usar qualquer número de porta que esteja livre em seu computador. Não é necessário usar a porta 3000.
Abra o seguinte URL em seu navegador: http://localhost:3000/dashboard
você será redirecionado para a seguinte página
Clique no botão Entrar
Você verá os seguintes resultados
Depois de fazer login, agora podemos ver os dados da sessão.
Resumo
Neste tutorial, você aprendeu o básico da biblioteca de sessões do CodeIgniter e aprendeu como usá-la para armazenar dados temporais como mensagens flash e como armazenar dados mais permanentes, ou seja, dados de login do usuário.