Cómo configurar una sesión en Codeigniter con ejemplo

Gestión de sesiones de CodeIgniter

Si ha desarrollado aplicaciones de escritorio antes, probablemente sepa que puede definir una variable global, asignarle un valor y usarla durante todo el ciclo de vida de la aplicación abriendo y cerrando más de una (1) y cada solicitud tendrá acceso a la variable global.

En otras palabras, se mantiene el estado de la aplicación. Es decir, si cuando inició sesión configuró el nombre de la empresa en una variable global, incluso después de cerrar el formulario de inicio de sesión, se conserva el estado del nombre de la empresa.

HTTP funciona un poco diferente del escenario anterior que acabamos de describir. Es apátrida. Es decir, cualquier cosa que hagas en una solicitud no persevera en la siguiente. t

Cómo solucionar este problema. Contamos con dos (2) soluciones en PHP. Podemos trabajar con cookies, que son pequeños archivos que se colocan en la computadora del usuario, o trabajar con sesiones que son similares a las cookies pero que se almacenan en el servidor y tienen una capacidad mayor que las cookies.

¿Cuándo utilizar sesiones?

Las sesiones suelen ser útiles cuando se desea conocer las actividades del usuario de una página a otra. Por ejemplo, digamos que tiene un área protegida en el sitio web. Los usuarios no necesitan iniciar sesión en cada página. Puede permitir que el usuario inicie sesión una vez y almacene su información.tails en una variable de sesión y luego reutilice los mismos datos en futuras solicitudes. Otros casos de uso incluyen cuando se trabaja en un sistema de compras y el usuario tiene que agregar artículos al carrito de compras.

Alternativamente, CodeIgniter también usa sesiones para que los datos estén disponibles solo una vez en la siguiente solicitud. Esto es útil si puede editar y actualizar un registro de base de datos y desea devolver algunos comentarios al usuario cuando se le redirige a otra página.

Envío de mensajes Flash a otras páginas con sesiones CI

En esta sección, aprenderá a enviar mensajes flash a otras páginas utilizando la biblioteca de sesiones en CodeIgniter

Cree un nuevo archivo SessionController en

application/controllers/SessionController.php

Agrega el siguientewing 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'));
    }
}

AQUÍ,

  • class SessionController extiende CI_Controller {…} define la clase SessionController y extiende la clase del controlador principal.
  • La función pública __construct() {…} define el método constructor que inicializa la clase principal y carga el asistente de URL y la biblioteca de sesión.
  • public function index() {…} define el método de índice de sesión que carga la vista de índice de sesión.
  • La función pública flash_message(){…} define el método de mensaje flash que establece los datos flash y luego redirige a la ruta flash_index.

Ahora creemos la vista que mostrará el valor de los datos de la sesión.

Cree una nueva sesión de directorio en aplicación/vistas

Cree un nuevo archivo index.php en aplicación/vistas/sesiones

Agrega el siguientewing 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>

AQUÍ,

session->userdata('msg');?> recupera el valor de los datos de la sesión con la clave de msg y lo muestra en el navegador.

Creemos ahora las rutas para nuestro método flash de sesión.

Abra aplicación/config/routes.php

Agrega el siguientewing líneas

$route['flash_index'] = 'session controller';
$route['flash_message'] = 'session controller/flash_message';

Ahora iniciemos el servidor integrado para PHP y prueba nuestros mensajes flash

Abre la terminal

Ejecute el siguientewing comando

cd C:\Sites\ci-app
php -S localhost:3000

AQUÍ,

El comando anterior navega hasta el directorio del código de la aplicación e inicia el servidor integrado en el puerto 3000.

Nota: la ruta de la aplicación debe coincidir con la ruta donde descargó CodeIgniter y puede usar cualquier número de puerto que esté libre en su computadora. No es necesario utilizar el puerto 3000.

Cargar el siguientewing URL en su navegador web: http://localhost:3000/flash_message

Serás redirigido al siguientewing URL y obtendrás el siguientewing Resultados: http://localhost:3000/flash_index

Envío de mensajes Flash a otras páginas

Haga clic en el botón de actualización de su navegador web o presione F5

Ahora obtendrás el siguientewing dE TRATAMIENTOS

Envío de mensajes Flash a otras páginas

Almacenamiento de datos de usuario en sesiones de CI

Veamos ahora un ejemplo un poco más avanzado. Para simplificarlo, simularemos la autenticación del usuario y no realizaremos la implementación real de verificar el registro del usuario en la base de datos y la contraseña enviada.

Empecemos por las rutas.

Abra route.php ubicado en application/config

Agrega el siguientewing rutas

$route['login'] = 'sessioncontroller/login';
$route['authenticate'] = 'sessioncontroller/authenticate';
$route['settings'] = 'sessioncontroller/settings';
$route['dashboard'] = 'sessioncontroller/dashboard';
$route['logout'] = 'sessioncontroller/logout';

AQUÍ,

  • $ruta['iniciar sesión'] = 'controlador de sesión/iniciar sesión'; define la ruta que muestra el formulario de inicio de sesión
  • $ruta['autenticar'] = 'controlador de sesión/autenticar'; define la ruta que simula el inicio de sesión exitoso del usuario y establece los datos de inicio de sesión de la sesión.
  • $ruta['configuración'] = 'controlador de sesión/configuración'; define una página protegida a la que solo deben acceder los usuarios que han iniciado sesión
  • $ruta['tablero'] = 'controlador de sesión/tablero'; define una página protegida a la que solo deben acceder los usuarios que han iniciado sesión.
  • $ruta['cerrar sesión'] = 'controlador de sesión/cerrar sesión'; cierra la sesión del usuario destruyendo los datos de la sesión

Actualicemos ahora el SessionController

Abra la aplicación/controladores/SessionController.php

Agrega el siguientewing 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'));
    }

AQUÍ,

  • La función pública check_auth($page) {…} define el método que verifica si el usuario ha iniciado sesión y luego permite el acceso a la página. Si un usuario no ha iniciado sesión, se le redirige a la página de inicio de sesión con un mensaje flash.
  • función pública login() {…} carga la vista de inicio de sesión ubicada en el directorio de sesiones.
  • La función pública authenticate() {…} establece los datos del usuario de la sesión para las claves login_in y nombre de usuario. NOTA: No estamos verificando ningún inicio de sesión.tails contra la base de datos. Simplemente estamos asumiendo el de presentadotails están bien y configure los datos de la sesión.
  • panel de función pública() {…} carga la página del panel después de llamar a $this->check_auth('dashboard'); que verifica que la clave de sesión logged_in esté configurada.
  • configuración de función pública() {…} carga la página de configuración que también está protegida
  • La función pública cerrar sesión() {…} destruye los datos de la sesión y cierra la sesión del usuario. El método también redirige a la página de inicio de sesión.

Vistas de sesión de CodeIgniter

Crea el siguientewing vistas en aplicación/vistas/sesiones

  • dashboard.php
  • login.php
  • settings.php

Agrega el siguientewing código para tablero.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>

AQUÍ,

session->userdata('username');?> muestra el nombre de usuario que configuramos en el método de autenticación

Agrega el siguientewing código para iniciar sesión.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>

AQUÍ,

El formulario de inicio de sesión se envía para autenticar la ruta.

Agrega el siguientewing código para 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>

Eso es todo por nuestras opiniones. Probemos ahora nuestra aplicación.

En este tutorial, utilizamos el servidor web PHP integrado, pero puede utilizar cualquier servidor web que admita PHP.

Abre la terminal

Ejecute el siguientewing comando

cd C:\Sites\ci-app
php -S localhost:3000

AQUÍ,

El comando anterior navega hasta el directorio del código de la aplicación e inicia el servidor integrado en el puerto 3000.

Nota: la ruta de la aplicación debe coincidir con la ruta donde descargó CodeIgniter y puede usar cualquier número de puerto que esté libre en su computadora. No es necesario utilizar el puerto 3000.

abre el siguientewing URL en su navegador web: http://localhost:3000/dashboard

serás redirigido al siguientewing página

Vistas de sesión de CodeIgniter

Haga clic en el botón Iniciar sesión

Verás lo siguientewing dE TRATAMIENTOS

Vistas de sesión de CodeIgniter

Después de iniciar sesión, ahora podemos ver los datos de la sesión.

Resumen

En este tutorial, aprendió los conceptos básicos de la biblioteca de sesiones CodeIgniter y aprendió cómo usarla para almacenar datos temporales como mensajes flash y cómo almacenar datos más permanentes, es decir, datos de inicio de sesión del usuario.