Como configurar uma sessão em CodeIgniter com exemplo
⚡ Resumo Inteligente
CodeO gerenciamento de sessão do Igniter armazena dados do usuário em requisições HTTP sem estado, permitindo que um aplicativo se lembre de um usuário conectado, itens no carrinho ou mensagens flash únicas. Este exemplo cria mensagens flash e um login simulado usando o CodeBiblioteca de sessão Igniter.

CodeGerenciamento de Sessão Igniter
Se você já desenvolveu aplicativos para desktop, provavelmente sabe que é possível definir uma variável global, atribuir um valor a ela e usá-la durante todo o ciclo de vida do aplicativo. Ao abrir e fechar mais de um formulário, cada requisição terá acesso à variável global.
Em outras palavras, o estado da aplicação é mantido. Ou seja, se ao fazer login você definiu o nome da empresa para uma variável global, então mesmo depois de fechar o formulário de login, esse estado do nome da empresa será preservado.
O HTTP funciona de maneira um pouco diferente do cenário que acabamos de descrever. Ele não mantém estado. Ou seja, o que você fizer em uma requisição não persiste na próxima.
Para 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 são armazenadas no servidor e têm uma capacidade maior do que os cookies.
Quando usar sessões?
As sessões são geralmente úteis quando você deseja acompanhar as atividades do usuário de página para página. Por exemplo, imagine 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 única vez e armazenar seus dados em uma variável de sessão, reutilizando esses mesmos dados em solicitações futuras. Outros casos de uso incluem o desenvolvimento de uma loja virtual.ping sistema e o usuário precisa adicionar itens à lojaping carrinho.
Alternativamente, CodeO Igniter também usa sessões para disponibilizar os dados apenas uma vez na próxima requisição. Isso é útil quando você edita e atualiza um registro no 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 CodeIgnorar.
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 um novo diretório de sessões 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 'msg' e o exibe no navegador.
Vamos agora criar as rotas para o nosso método flash de sessão.
Abra application/config/routes.php
Adicione as seguintes linhas
$route['flash_index'] = 'sessioncontroller'; $route['flash_message'] = 'sessioncontroller/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.
Observação: o caminho do aplicativo deve corresponder ao caminho onde você o baixou. CodeIgniter, e você pode usar qualquer número de porta livre no seu computador. Não é necessário usar a porta 3000.
Carregue o seguinte URL No seu navegador web: http://localhost:3000/flash_message
Você será redirecionado para o seguinte URLE você 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, sem implementar a verificação do registro 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,
- A função pública `check_auth($page) {…}` define o método que verifica se o usuário está autenticado e, em caso afirmativo, permite o acesso à página. Se o usuário não estiver autenticado, ele será redirecionado para a página de login com uma mensagem flash.
- public function login() {…} carrega a view 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 logged_in está definida.
- public function settings() {…} carrega a página de configurações, que também é 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
CodeVisualizações de sessão do Igniter
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:0 </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(3);?></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:0 </head> <body> <div class="container"> <div class="column"> <p><?=$this->session->userdata(1);?></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="password" 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 a rota de autenticação.
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:0 </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>
Por hoje é só. 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.
Observação: o caminho do aplicativo deve corresponder ao caminho onde você o baixou. CodeIgniter, e você pode usar qualquer número de porta livre no seu computador. Não é necessário usar a porta 3000.
Abra o seguinte URL No seu navegador web: 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.




