Advertisement
  1. Code
  2. CodeIgniter

Cómo Trabajar con Datos de Sesión en CodeIgniter

Scroll to top
Read Time: 12 min

Spanish (Español) translation by Alfonso Mora (you can also view the original English article)

Como un desarrollador de CodeIgniter, es muy importante para entender cómo trabajar con la biblioteca de sesión básica. Por supuesto, siempre puede usar la sintaxis de defecto $_SESSION, pero se recomienda siempre utilizar el contenedor en su lugar.

A partir de cómo cargar una biblioteca de sesión, trasladaremos a la discusión de cómo agregar, recuperar, eliminar y destruir las variables de sesión. En el último segmento, tendremos un vistazo a los controladores de sesión incorporado diferentes a su disposición proporcionada por el propio framework CodeIgniter.

Cómo Cargar una Biblioteca de Sesión

Si desea trabajar con sesiones en CodeIgniter, lo primero que necesitarás es una biblioteca incorporada de la sesión. A menos que y hasta que desarrollas una aplicación web que no requiere sesiones en todo, no debe preocuparse la biblioteca de la sesión. Mientras que no es el caso sobre todo el tiempo, puede cargar automáticamente la biblioteca de la sesión en CodeIgniter para que permite sesión manejo de características para cada solicitud web.

Seguir adelante y abrir el archivo se encuentra en application/config/autoload.php. Busque la sección siguiente.

1
/*

2
| -------------------------------------------------------------------

3
|  Auto-load Libraries

4
| -------------------------------------------------------------------

5
| These are the classes located in system/libraries/ or your

6
| application/libraries/ directory, with the addition of the

7
| 'database' library, which is somewhat of a special case.

8
|

9
| Prototype:

10
|

11
|    $autoload['libraries'] = array('database', 'email', 'session');

12
|

13
| You can also supply an alternative library name to be assigned

14
| in the controller:

15
|

16
|  $autoload['libraries'] = array('user_agent' => 'ua');

17
*/
18
$autoload['libraries'] = array();

El $autoload ['libraries'] es la lista de bibliotecas que se cargan automáticamente. Según nuestro requisito, vamos a cambiar para parecerse a esto:

1
$autoload['libraries'] = array('session');

Además, hay otra manera usted podría han logrado. Puede utilizar el código siguiente en algún lugar en el archivo del controlador para cargar la biblioteca de la sesión.

1
$this->load->library('session');

Eso es más o menos en cuanto a la inicialización de la biblioteca de la sesión.

En los próximos apartados, iremos a través de las diferentes operaciones que se pueden hacer con la biblioteca de sesión básica. Para demostrarlo, construimos un archivo de controlador de ejemplo que carga la biblioteca de la sesión y proporciona métodos que se discutirán a lo largo de este artículo.

Seguir adelante y crear un archivo application/controllers/Example.php con el siguiente contenido.

1
<?php
2
defined('BASEPATH') OR exit('No direct script access allowed');
3
4
class Example extends CI_Controller {
5
    public function __construct()
6
    {
7
        parent::__construct();
8
9
        // load Session Library

10
        $this->load->library('session');
11
        
12
        // load url helper

13
        $this->load->helper('url');
14
    }
15
16
    public function index()
17
    {
18
        /**** SET SESSION DATA ****/
19
        // set single item in session

20
        $this->session->set_userdata('favourite_website', 'https://tutsplus.com');
21
        
22
        // set array of items in session

23
        $arraydata = array(
24
                'author_name'  => 'Sajal Soni',
25
                'website'     => 'http://code.tutsplus.com',
26
                'twitter_id' => '@sajalsoni',
27
                'interests' => array('tennis', 'travelling')
28
        );
29
        $this->session->set_userdata($arraydata);
30
        
31
        /**** GET SESSION DATA ****/
32
        // get data from session

33
        echo "Favourite Website: ". $this->session->userdata('favourite_website');
34
        echo "<br>";
35
        echo "Author Name: ". $this->session->userdata('author_name');
36
        echo "<br>";
37
        echo "Interest (Array Example): " . $this->session->userdata('interests')[0];
38
        echo "<br>";
39
    
40
        // get e'thing stored in session at once

41
        echo '<pre>';
42
        print_r($this->session->userdata());
43
        
44
        /**** REMOVE SESSION DATA ****/
45
        // unset specific key from session

46
        $this->session->unset_userdata('favourite_website');
47
        
48
        // unset multiple items at once

49
        $keys = array('twitter_id', 'interests');
50
        $this->session->unset_userdata($keys);
51
    
52
        echo '<pre>';
53
        print_r($this->session->userdata());
54
    }
55
    
56
    public function setflash()
57
    {
58
        // set flash data

59
        $this->session->set_flashdata('flash_welcome', 'Hey, welcome to the site!');
60
        
61
        // mark existing data as flash data

62
        $this->session->set_userdata('flash_message', 'I am flash message!');
63
        $this->session->mark_as_flash('flash_message');
64
        
65
        redirect('example/getflash');
66
    }
67
    
68
    public function getflash() 
69
    {
70
        // get flash data

71
        echo "Flash welcome message: ". $this->session->flashdata('flash_welcome');
72
        echo '<pre>';
73
        print_r($this->session->flashdata());
74
    }
75
76
    public function tempdata() 
77
    {
78
        // set temp data

79
        $this->session->set_tempdata('coupon_code', 'XYEceQ!', 300);
80
81
        // mark existing data as temp data

82
        $this->session->set_userdata('coupon_code', 'XYEceQ!');
83
        $this->session->mark_as_temp('coupon_code', 300);
84
        
85
        // get temp data

86
        echo $this->session->tempdata('coupon_code');
87
    }
88
89
    public function destroy()
90
    {
91
        $this->session->set_userdata('favourite_website', 'http://tutsplus.com');
92
        
93
        // destory session

94
        $this->session->sess_destroy();
95
    }
96
}

Es un archivo de controlador muy básico que debe estar familiarizado con un desarrollador de CodeIgniter. Ahora, estamos listos para pasar a la siguiente pareja de secciones que proporcionan información sobre la sesión manejo de conceptos.

Cómo Agregar, Recuperar y Eliminar Datos de la Sesión

Para comenzar con, vamos a buscar el código de nuestro método __construct.

1
public function __construct()
2
{
3
    parent::__construct();
4
5
    // load Session Library

6
    $this->load->library('session');
7
    
8
    // load url helper

9
    $this->load->helper('url');
10
}

En caso de que no cargan automáticamente la biblioteca de la sesión, que va a hacer en primer lugar. Aparte de eso, también hemos cargado el helper url que nos permite utilizar ciertos métodos de utilidad que veremos más adelante.

A continuación, coge el código del método index.

1
public function index()
2
{
3
    /**** SET SESSION DATA ****/
4
    // set single item in session

5
    $this->session->set_userdata('favourite_website', 'http://tutsplus.com');
6
    
7
    // set array of items in session

8
    $arraydata = array(
9
            'author_name'  => 'Sajal Soni',
10
            'website'     => 'http://code.tutsplus.com',
11
            'twitter_id' => '@sajalsoni',
12
            'interests' => array('tennis', 'travelling')
13
    );
14
    $this->session->set_userdata($arraydata);
15
    
16
    /**** GET SESSION DATA ****/
17
    // get data from session

18
    echo "Favourite Website: ". $this->session->userdata('favourite_website');
19
    echo "<br>";
20
    echo "Author Name: ". $this->session->userdata('author_name');
21
    echo "<br>";
22
    echo "Interest (Array Example): " . $this->session->userdata('interests')[0];
23
    echo "<br>";
24
25
    // get e'thing stored in session at once

26
    echo '<pre>';
27
    print_r($this->session->userdata());
28
    
29
    /**** REMOVE SESSION DATA ****/
30
    // unset specific key from session

31
    $this->session->unset_userdata('favourite_website');
32
    
33
    // unset multiple items at once

34
    $keys = array('twitter_id', 'interests');
35
    $this->session->unset_userdata($keys);
36
37
    echo '<pre>';
38
    print_r($this->session->userdata());
39
}

Como has cargado la biblioteca sesión ya, puede usar $this-> session para obtener acceso al objeto de la sesión y acceder a los métodos que son compatibles. El método set_userdata se utiliza para crear una variable de sesión nuevo y generalmente toma dos argumentos: key y value.

1
$this->session->set_userdata('favourite_website', 'http://tutsplus.com');

También puede utilizar el método set_userdata para crear múltiples variables en una sola llamada. En ese caso, basta con proporcionar un argumento, y debe ser una matriz como se muestra a continuación.

1
// set array of items in session

2
$arraydata = array(
3
        'author_name'  => 'Sajal Soni',
4
        'website'     => 'http://code.tutsplus.com',
5
        'twitter_id' => '@sajalsoni',
6
        'interests' => array('tennis', 'travelling')
7
);
8
$this->session->set_userdata($arraydata);

Los usuarios con ojos agudos habría notado que también podría asignar una matriz como un valor de cualquier variable de sesión, como se muestra en el ejemplo de sus interests.

Ahora, vamos a ver cómo recuperar el valor de cualquier variable de sesión. El método de userdata se utiliza para recuperar el valor de cualquier variable de sesión, y generalmente necesita la clave de la variable de sesión que usted está buscando como primer argumento.

1
echo "Favourite Website: ". $this->session->userdata('favourite_website');

Si usted está buscando para una de las entradas de la matriz, puede utilizar lo siguiente:

1
echo "Interest (Array Example): " . $this->session->userdata('interests')[0];

Más a menudo que no, quiere saber cuántas variables en total se almacenan en una sesión activa para propósitos de depuración, y puede hacerlo así.

1
// get e'thing stored in session at once

2
echo '<pre>';
3
print_r($this->session->userdata());

¡Sí, el mismo método de userdata viene a nuestro rescate! Si no pasa ningún argumento al método userdata, volveremos todas las variables de sesión.

Por último, vamos a ver cómo puede quitar las variables de la sesión. Es el método de unset_userdata que se puede utilizar si desea eliminar las entradas de cualquier período de sesiones.

1
// unset specific key from session

2
$this->session->unset_userdata('favourite_website');

Y aquí está la variación del mismo método que muestra cómo quitar entradas múltiples de una sola vez.

1
// unset multiple items at once

2
$keys = array('twitter_id', 'interests');
3
$this->session->unset_userdata($keys);

Y que debe eliminar las entradas twitter_id e intereses del período de sesiones.

Seguir adelante y probar el método de index para ver las cosas en acción.

Cosas Utiles: Flashdata y Tempdata

En la última sección, discuten los fundamentos de la sesión en CodeIgniter. En esta sección, analizaremos dos otros métodos de utilidad proporcionadas por la biblioteca de la sesión.

En su desarrollo día a día, a menudo necesitan Mostrar mensajes en respuesta a ciertas acciones del usuario. Por ejemplo, desea mostrar un mensaje de éxito cuando alguien los mensajes de un Comentario en su sitio, y el mensaje aparecerá sólo una vez. El método set_flashdata es un candidato perfecto para este tipo de caso de uso.

De hecho, set_flashdata es muy similar al método set_userdata que permite guardar un valor en la sesión. La única excepción es que la sesión de valor establecido por el método de flashdata está disponible para la siguiente petición. En las solicitudes posteriores, no podrá acceder a estas variables ya que eran despejaron.

Coge el código del método setflash.

1
public function setflash()
2
{
3
    // set flash data

4
    $this->session->set_flashdata('flash_welcome', 'Hey, welcome to the site!');
5
    
6
    // mark existing data as flash data

7
    $this->session->set_userdata('flash_message', 'I am flash message!');
8
    $this->session->mark_as_flash('flash_message');
9
    
10
    redirect('example/getflash');
11
}

Puede crear una nueva variable flashdata de la misma manera que habría creado una variable de sesión regular mediante el método set_userdata. Por otro lado, también puede marcar una variable de sesión existente como una variable de flashdata. En ese caso, usted necesita utilizar el método mark_as_flash, como se muestra en el código anterior.

Por último, redirigir al usuario al método de getflash que muestra cómo utilizar las variables de flashdata establecidos en el método setflash. Echemos un vistazo al método de getflash.

1
public function getflash() 
2
{
3
    // get flash data

4
    echo "Flash welcome message: ". $this->session->flashdata('flash_welcome');
5
    echo '<pre>';
6
    print_r($this->session->flashdata());
7
}

Como era de esperar, existe un método flashdata que permite obtener las variables de sesión como flashdata. Si se llama al método flashdata sin argumentos, lo vas a volver todas las variables de flashdata similar a la del método userdata.

Seguir adelante y probar el método setflash. Se le redireccionará a la URL de getflash, y verás el mensaje. Si actualiza la página de getflash, no verás ese mensaje otra vez!

Luego, hay otra variación proporcionada por la biblioteca de la sesión en esta categoría, las variables de sesión de tempdata. Si desea crear variables de sesión para un período de tiempo específico, el método set_tempdata es el que buscas.

Por ejemplo, si desea crear una variable de sesión que debe suprimirse automáticamente tras un cierto periodo de tiempo, usted puede utilizar el método set_tempdata para crear una variable así, como se muestra en el siguiente método.

1
public function tempdata() 
2
{
3
    // set temp data

4
    $this->session->set_tempdata('coupon_code', 'XYEceQ!', 300);
5
6
    // mark existing data as temp data

7
    $this->session->set_userdata('coupon_code', 'XYEceQ!');
8
    $this->session->mark_as_temp('coupon_code', 300);
9
    
10
    // get temp data

11
    echo $this->session->tempdata('coupon_code');
12
}

El tercer argumento en el método set_tempdata indica el número de segundos después de que la variable se eliminará de la sesión.

También puede marcar una variable de sesión existente como tempdata utilizando el método de mark_as_temp que ya ha creado una variable de sesión mediante el método set_userdata.

Por último, puede utilizar el método de tempdata para obtener el valor de cualquier variable de tempdata.

Así que es bueno tener estos métodos de utilidad a su disposición en el ciclo de vida de desarrollo día a día!

Lo Que No Debe Olvidar: Destruir Sesión

Destrucción de la sesión es probablemente la última cosa que quieres hacer cuando el usuario cierra la sesión. Se asegura que las variables de sesión establecidas hasta el momento se eliminan de la sesión activa y ya no están disponibles para las solicitudes subsiguientes.

Vamos a tirar en el código del método destroy y pasar por ella.

1
public function destroy()
2
{
3
    $this->session->set_userdata('favourite_website', 'http://tutsplus.com');
4
    
5
    // destroy session

6
    $this->session->sess_destroy();
7
}

Es el método de sess_destroy que nos ayuda a destruir la sesión activa. Por supuesto, también van eliminar variables tempdata y flashdata que se establecieron en la sesión activa.

Asegúrese usted mismo en el hábito de destruir una sesión una vez que ya no es útil en el contexto de usuario actual.

Cereza del Pastel: Controladores de Sesión

Estamos en la última sección de este artículo, los conductores de sesión. Más a menudo que no, no te molestes acerca de cómo configurar el controlador de sesión en su aplicación como el controlador predeterminado de período de sesiones, el sistema de archivos está configurado ya con la configuración predeterminada.

Así es el sistema de archivo que contiene todos los datos relativos a la sesión, y es ampliamente utilizado y es el estándar aceptado para el manejo de sesiones. Dicho que CodeIgniter también es compatible con otros conductores de sesión que podría usar si desea cambiar el controlador de sesión de sistema de archivos por defecto.

Aquí está una lista de todos los controladores de sesión apoyados en CodeIgniter:

  • Archivos
  • Base de datos
  • Redis
  • Memcached

Los drivers de sesión de base de datos, como su nombre indica, almacena los datos de sesión en la base de datos que hayas configurado para su aplicación de CodeIgniter.

Por otra parte, la otra sesión dos controladores son mecanismos de almacenamiento en memoria preferidos para los sitios web de alto rendimiento.

En el archivo application/config/config.php, puede configurar el controlador de sesión que le gustaría usar en su aplicación.

1
$config['sess_driver'] = 'database';
2
$config['sess_save_path'] = 'custom_sessions';

Dice CodeIgniter para utilizar el controlador de sesión de base de datos, y los datos de sesión se guardará en la tabla de MySQL custom_sessions.

Discusión de cada controlador de sesión está fuera del alcance de este artículo, pero usted puede ir a través de la documentación del sitio oficial que proporciona a una guía completa para cada conductor.

Conclusión

Sesión en CodeIgniter fue el tema de tutorial de hoy, y discutimos bien mirando cada aspecto del tema.

A partir de las operaciones básicas de la sesión, pasamos también por ésos flashdata fresco y métodos de tempdata, y fue la discusión de los controladores de sesión que concluyó nuestro artículo.

Como siempre, podría gritar sus consultas y sugerencias con el avance de abajo!

Advertisement
Did you find this post useful?
Want a weekly email summary?
Subscribe below and we’ll send you a weekly email summary of all new Code tutorials. Never miss out on learning about the next big thing.
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.