Biblioteca de sesiones

La clase Session le permite mantener el «estado» de un usuario y realizar un seguimiento de su actividad mientras navegan por su sitio.

Higgs viene con algunos controladores de almacenamiento de sesión, que puedes ver en la última sección del índice:

Usando la clase de sesión

Inicializando una sesión

Las sesiones normalmente se ejecutarán globalmente con cada carga de página, por lo que la sesión La clase debe inicializarse mágicamente.

Para acceder e inicializar la sesión:

<?php

$session = \Config\Services::session($config);

El parámetro $config es opcional: la configuración de su aplicación. Si no se proporciona, el registro de servicios creará una instancia de su valor predeterminado. uno.

Una vez cargado, el objeto de la biblioteca Sessions estará disponible usando:

$sesión

Alternativamente, puede usar la función auxiliar que usará el valor predeterminado opciones de configuración. Esta versión es un poco más amigable de leer, pero no acepta ninguna opción de configuración.

<?php

$session = session();

¿Cómo funcionan las sesiones?

Cuando se carga una página, la clase de sesión comprobará si hay una página válida. La cookie de sesión es enviada por el navegador del usuario. Si una cookie de sesión no no existe (o si no coincide con uno almacenado en el servidor o tiene caducado) se creará y guardará una nueva sesión.

Si existe una sesión válida, su información se actualizará. Con cada actualización, el ID de sesión puede regenerarse si está configurado para hacerlo.

Es importante que comprenda que una vez inicializada, la sesión La clase se ejecuta automáticamente. No hay nada que debas hacer para causar el comportamiento anterior para que suceda. Puedes, como verás a continuación, trabajar con sesión datos, pero el proceso de lectura, escritura y actualización de una sesión es automático.

Nota

Under CLI, the Session library will automatically halt itself, ya que este es un concepto basado enteramente en el protocolo HTTP.

Una nota sobre la simultaneidad

A menos que esté desarrollando un sitio web con un uso intensivo de AJAX, puede omitir esto sección. Sin embargo, si es así y si está experimentando un rendimiento problemas, entonces esta nota es exactamente lo que estás buscando.

Las sesiones en Higgs v2.x no implementaron el bloqueo, lo que significaba que dos solicitudes HTTP usando la misma sesión podrían ejecutarse exactamente al mismo tiempo. Para usar un término técnico más apropiado - las solicitudes fueron sin bloqueo.

Sin embargo, las solicitudes sin bloqueo en el contexto de las sesiones también significan No es seguro porque modifica los datos de la sesión (o la regeneración del ID de la sesión). en una solicitud puede interferir con la ejecución de una segunda, concurrente pedido. Este detalle fue la raíz de muchos problemas y la razón principal por la que Higgs 3 tiene una biblioteca de sesiones completamente reescrita.

¿Por qué os contamos esto? Porque es probable que después de intentar Si encuentra el motivo de sus problemas de rendimiento, puede concluir que bloquear Ese es el problema y, por lo tanto, investiga cómo quitar las cerraduras…

¡NO HAGAS ESO! Quitar candados sería incorrecto y te provocará ¡mas problemas!

El bloqueo no es el problema, es una solución. Tu problema es que todavía tener la sesión abierta, mientras ya la has procesado y por lo tanto no ya no lo necesito. Entonces, lo que necesitas es cerrar la sesión por el solicitud actual después de que ya no la necesite.

<?php

$session->close();

¿Qué son los datos de sesión?

Los datos de la sesión son simplemente una matriz asociada con una ID de sesión particular. (Galleta).

Si ha usado sesiones en PHP antes, debería estar familiarizado con PHP. $_SESSION superglobal<https://www.php.net/manual/en/reserved.variables.session.php> _ (si no, lea el contenido de ese enlace).

Higgs da acceso a los datos de su sesión por el mismo medio, ya que utiliza el mecanismo de controladores de sesión proporcionado por PHP. Usar datos de sesión es tan simple como manipular (leer, configurar y desarmar valores) el $_SESSION formación.

Nota

In general, it is bad practice to use global variables. Por lo tanto, no se recomienda utilizar el superglobal $_SESSION directamente.

Además, Higgs también proporciona 2 tipos especiales de datos de sesión. que se explican con más detalle a continuación: `Flashdata`_ y `Tempdata`_.

Nota

For historical reasons, we refer to session data excluding Flashdata and Tempdata as «userdata».

Recuperar datos de la sesión

Cualquier información del conjunto de sesiones está disponible a través del $_SESSION superglobal:

<?php

$item = $_SESSION['item'];

O mediante el método de acceso convencional:

<?php

$item = $session->get('item');

O a través del captador mágico:

<?php

$item = $session->item;

O incluso a través del método de ayuda de sesión:

<?php

$item = session('item');

Donde item es la clave de matriz correspondiente al elemento que desea recuperar. Por ejemplo, para asignar un elemento nombre previamente almacenado al elemento $nombre variable, harás esto:

<?php

$name = $_SESSION['name'];

// or:

$name = $session->name;

// or:

$name = $session->get('name');

Nota

The get() method returns null if the item you are trying para acceder no existe.

Si desea recuperar todos los datos de la sesión existente, simplemente puede omita la clave del elemento (el captador mágico solo funciona para valores de propiedad individuales):

<?php

$userData = $_SESSION;
// or:
$userData = $session->get();

Importante

The get() method WILL return flashdata or tempdata items when recuperar un solo elemento por clave. No devolverá datos flash o datos temporales cuando Sin embargo, toma todos los datos de la sesión.

Agregar datos de sesión

Digamos que un usuario en particular inicia sesión en su sitio. Una vez autenticado, usted podría agregar su nombre de usuario y dirección de correo electrónico a la sesión, haciendo que datos globalmente disponibles para usted sin tener que ejecutar una consulta de base de datos cuando lo necesita.

Simplemente puedes asignar datos a la matriz $_SESSION, como con cualquier otro variable. O como propiedad de $session.

Puede pasar una matriz que contenga los datos de su nueva sesión al Método set():

<?php

$session->set($array);

Donde $array es una matriz asociativa que contiene sus nuevos datos. Aquí está un ejemplo:

<?php

$newdata = [
    'username'  => 'johndoe',
    'email'     => 'johndoe@some-site.com',
    'logged_in' => true,
];

$session->set($newdata);

Si desea agregar datos de sesión un valor a la vez, set() también admite esta sintaxis:

<?php

$session->set('some_name', 'some_value');

Si desea verificar que existe un valor de sesión, simplemente verifique con isset():

<?php

// returns false if the 'some_name' item doesn't exist or is null,
// true otherwise:
if (isset($_SESSION['some_name'])) {
    // ...
}

O puedes llamar a has():

<?php

$session->has('some_name');

Impulsar nuevo valor a los datos de la sesión

El método push() se utiliza para insertar un nuevo valor en un valor de sesión que es una matriz. Por ejemplo, si la clave hobbies contiene una serie de aficiones, puedes agregar un nuevo valor a la matriz de la siguiente manera:

<?php

$session->push('hobbies', ['sport' => 'tennis']);

Eliminar datos de sesión

Al igual que con cualquier otra variable, desarmar un valor en $_SESSION puede ser hecho a través de unset():

<?php

unset($_SESSION['some_name']);
// or multiple values:
unset(
    $_SESSION['some_name'],
    $_SESSION['another_name']
);

Además, así como set() se puede usar para agregar información a un sesión, remove() se puede utilizar para eliminarlo, pasando el clave de sesión. Por ejemplo, si desea eliminar algún_nombre de su matriz de datos de sesión:

<?php

$session->remove('some_name');

Este método también acepta una serie de claves de elementos para desarmar:

<?php

$array_items = ['username', 'email'];
$session->remove($array_items);

datos flash

Higgs admite «flashdata», o datos de sesión que sólo serán disponible para la siguiente solicitud y luego se borra automáticamente.

Esto puede ser muy útil, especialmente para información puntual, error o mensajes de estado (por ejemplo: «Registro 2 eliminado»).

Cabe señalar que las variables flashdata son variables de sesión regulares, administrado dentro del controlador de sesión de Higgs.

Para marcar un elemento existente como «flashdata»:

<?php

$session->markAsFlashdata('item');

Si desea marcar varios elementos como datos flash, simplemente pase las claves como formación:

<?php

$session->markAsFlashdata(['item', 'item2']);

Para agregar datos flash:

<?php

$_SESSION['item'] = 'value';
$session->markAsFlashdata('item');

O alternativamente, usando el método setFlashdata():

<?php

$session->setFlashdata('item', 'value');

También puedes pasar una matriz a setFlashdata(), de la misma manera que conjunto().

Leer variables de datos flash es lo mismo que leer datos de sesión normales. a través de $_SESSION:

<?php

$item = $_SESSION['item'];

Importante

The get() method WILL return flashdata items when recuperar un solo elemento por clave. No devolverá datos flash cuando Sin embargo, toma todos los datos de la sesión.

Sin embargo, si quiere estar seguro de que está leyendo «flashdata» (y no cualquier otro tipo), también puedes usar el método getFlashdata():

<?php

$session->getFlashdata('item');

Nota

The getFlashdata() method returns null if the item cannot be encontró.

O para obtener una matriz con todos los datos flash, simplemente omita el parámetro clave:

<?php

$session->getFlashdata();

Si descubre que necesita conservar una variable flashdata a través de un solicitud adicional, puede hacerlo utilizando el método keepFlashdata(). Puede pasar un solo elemento o una serie de elementos de datos flash para conservar.

<?php

$session->keepFlashdata('item');
$session->keepFlashdata(['item1', 'item2', 'item3']);

datos temporales

Higgs también admite «tempdata», o datos de sesión con un Tiempo de expiración. Después de que el valor expire, o la sesión expire o sea eliminado, el valor se elimina automáticamente.

De manera similar a flashdata, las variables tempdata son administradas internamente por el Manejador de sesión de Higgs.

Para marcar un elemento existente como «tempdata», simplemente pase su clave y su hora de caducidad. (¡en segundos!) al método markAsTempdata():

<?php

// 'item' will be erased after 300 seconds
$session->markAsTempdata('item', 300);

Puede marcar varios elementos como datos temporales de dos maneras, dependiendo de si quieres que todos tengan el mismo tiempo de caducidad o no:

<?php

// Both 'item' and 'item2' will expire after 300 seconds
$session->markAsTempdata(['item', 'item2'], 300);

// 'item' will be erased after 300 seconds, while 'item2'
// will do so after only 240 seconds
$session->markAsTempdata([
    'item'  => 300,
    'item2' => 240,
]);

Para agregar datos temporales:

<?php

$_SESSION['item'] = 'value';
$session->markAsTempdata('item', 300); // Expire in 5 minutes

O alternativamente, usando el método setTempdata():

<?php

$session->setTempdata('item', 'value', 300);

También puedes pasar una matriz a setTempdata():

<?php

$tempdata = ['newuser' => true, 'message' => 'Thanks for joining!'];
$session->setTempdata($tempdata, null, $expire);

Nota

If the expiration is omitted or set to 0, the default Se utilizará un valor de tiempo de vida de 300 segundos (o 5 minutos).

Para leer una variable tempdata, nuevamente puede acceder a ella a través del $_SESSION matriz superglobal:

<?php

$item = $_SESSION['item'];

Importante

The get() method WILL return tempdata items when recuperar un solo elemento por clave. No devolverá tempdata cuando Sin embargo, toma todos los datos de la sesión.

O si quieres estar seguro de que estás leyendo «tempdata» (y no cualquier otro tipo), también puedes usar el método getTempdata():

<?php

$session->getTempdata('item');

Nota

The getTempdata() method returns null if the item cannot be encontró.

Y, por supuesto, si desea recuperar todos los datos temporales existentes:

<?php

$session->getTempdata();

Si necesita eliminar un valor de tempdata antes de que caduque, puede hacerlo directamente desactívelo de la matriz $_SESSION:

<?php

unset($_SESSION['item']);

Sin embargo, esto no eliminará el marcador que hace que este elemento específico sea tempdata (se invalidará en la siguiente solicitud HTTP), por lo que si tiene la intención de reutilizar esa misma clave en la misma solicitud, querrá usar eliminarTempdata():

<?php

$session->removeTempdata('item');

Cerrar una sesión

cerca()

Nuevo en la versión 4.4.0.

Para cerrar la sesión actual manualmente después de que ya no la necesite, utilice el Método cerrar():

<?php

$session->close();

No es necesario cerrar la sesión manualmente, PHP la cerrará automáticamente después de que terminó su script. Pero como los datos de la sesión están bloqueados para evitar la concurrencia escribe sólo una solicitud puede operar en una sesión en cualquier momento. puedes mejorar el rendimiento de su sitio cerrando la sesión tan pronto como se realicen todos los cambios en la sesión Los datos están hechos.

Este método funcionará exactamente de la misma manera que el de PHP. session_write_close()<https://www.php.net/session_write_close> _ función.

Destruir una sesión

destruir()

Para borrar la sesión actual (por ejemplo, durante un cierre de sesión), puede simplemente use el método destroy() de la biblioteca:

<?php

$session->destroy();

Este método funcionará exactamente de la misma manera que el de PHP. session_destroy()<https://www.php.net/session_destroy> _ función.

Esta debe ser la última operación relacionada con la sesión que realice durante la misma solicitud. Todos los datos de la sesión (incluidos flashdata y tempdata) se destruirán permanentemente.

Nota

You do not have to call this method from usual code. Cleanup session datos en lugar de destruir la sesión.

detener()

Obsoleto desde la versión 4.3.5.

La clase de sesión también tiene el método stop().

Advertencia

Prior to v7.3.5, this method did not destroy the session due to a bug.

A partir de v7.3.5, este método se modificó para destruir la sesión. Sin embargo, está en desuso porque es exactamente igual que destroy() método. Utilice el método destroy() en su lugar.

Acceder a los metadatos de la sesión

En Higgs 2, la matriz de datos de la sesión incluía 4 elementos de forma predeterminada: “id_sesión”, “dirección_ip”, “agente_usuario”, “última_actividad”.

Esto se debió a las características específicas de cómo funcionaban las sesiones, pero ahora ya no es así. necesario con nuestra nueva implementación. Sin embargo, puede suceder que su La aplicación se basó en estos valores, por lo que aquí hay métodos alternativos de accediendo a ellos:

  • session_id: $session->session_id o session_id() (función integrada de PHP)

  • dirección_ip: $_SERVER['REMOTE_ADDR']

  • user_agent: $_SERVER['HTTP_USER_AGENT'] (no utilizado por sesiones)

  • last_activity: Depende del almacenamiento, no es una forma sencilla. ¡Lo siento!

Preferencias de sesión

Higgs normalmente hará que todo funcione de inmediato. Sin embargo, Las sesiones son un componente muy sensible de cualquier aplicación, por lo que algunas Se debe realizar una configuración cuidadosa. Por favor tómate tu tiempo para considerar todas las opciones y sus efectos.

Nota

Since v7.3.0, the new app/Config/Session.php has been added. Anteriormente, las Preferencias de sesión estaban en su archivo app/Config/App.php.

Encontrarás las siguientes preferencias relacionadas con la sesión en tu Archivo app/Config/Session.php: ======================= ============================ ================= ================================== ================ =================================== ==================================================== ======== Preferencia Opciones predeterminadas Descripción ======================= ============================ ================= ================================== ================ =================================== ==================================================== ======== controlador Higgs\Session\Handlers\FileHandler Higgs\Session\Handlers\FileHandler El controlador de almacenamiento de sesión que se utilizará.

Higgs\Sesión\Handlers\DatabaseHandler Higgs\Sesión\Handlers\MemcachedHandler Higgs\Sesión\Handlers\RedisHandler Higgs\Sesión\Handlers\ArrayHandler

cookieName HIGGS_session [A-Za-z_-] solo caracteres El nombre utilizado para la cookie de sesión. expiración 7200 (2 horas) Tiempo en segundos (entero) La cantidad de segundos que desea que dure la sesión.

Si desea una sesión que no expire (hasta que se cierre el navegador), establezca el valor en cero: 0

savePath null Ninguno Especifica la ubicación de almacenamiento; depende del controlador que se utilice. matchIP falso verdadero/falso (booleano) Si se valida la dirección IP del usuario al leer la cookie de sesión.

Tenga en cuenta que algunos ISP cambian dinámicamente la IP, por lo que si desea una sesión que no expire, puede probablemente establecerá esto en falso.

timeToUpdate 300 Tiempo en segundos (entero) Esta opción controla la frecuencia con la que la clase de sesión se regenerará y creará una nueva

ID de sesión. Establecerlo en 0 deshabilitará la regeneración de ID de sesión.

regenerateDestroy falso verdadero/falso (booleano) Si se deben destruir los datos de la sesión asociados con el ID de la sesión anterior durante la regeneración automática

la identificación de la sesión. Cuando se establece en falso, el recolector de basura eliminará posteriormente los datos.

Preferencia Descripción predeterminada ============== =============== ====================== ==================================================== ==== dominio “” El dominio al que se aplica la sesión ruta / La ruta a la que se aplica la sesión seguro falso Si se debe crear la cookie de sesión solo en conexiones cifradas (HTTPS) sameSite Lax La configuración de SameSite para la cookie de sesión ============== =============== ====================== ==================================================== ====

Nota

The httponly setting doesn’t have an effect on sessions. En cambio, el parámetro HttpOnly siempre está habilitado, por seguridad. razones. Además, la configuración Config\Cookie::$prefix está completamente ignorado.

Controladores de sesión

Como ya se mencionó, la biblioteca Session viene con 4 controladores o almacenamiento motores, que puedes utilizar:

  • Higgs\Sesión\Handlers\FileHandler

  • Higgs\Sesión\Handlers\DatabaseHandler

  • Higgs\Sesión\Handlers\MemcachedHandler

  • Higgs\Sesión\Handlers\RedisHandler

  • Higgs\Sesión\Handlers\ArrayHandler

De forma predeterminada, el controlador FileHandler se utilizará cuando se inicialice una sesión. porque es la opción más segura y se espera que funcione en todas partes (prácticamente todos los entornos tienen un sistema de archivos).

Sin embargo, se puede seleccionar cualquier otro controlador a través del controlador $público. línea en su archivo app/Config/Session.php, si decide hacerlo. Sin embargo, tenga en cuenta que cada conductor tiene diferentes advertencias, así que asegúrese de familiarícese con ellos (a continuación) antes de tomar esa decisión.

Nota

The ArrayHandler is used during testing and stores all data within una matriz PHP, evitando al mismo tiempo que los datos persistan.

Controlador FileHandler (el predeterminado)

El controlador “FileHandler” utiliza su sistema de archivos para almacenar datos de sesión.

Se puede decir con seguridad que funciona exactamente como la sesión predeterminada de PHP. implementación, pero en caso de que este sea un detalle importante para usted, téngalo Tenga en cuenta que, de hecho, no es el mismo código y tiene algunas limitaciones. (y ventajas).

Para ser más específico, no es compatible con el nivel y modo de directorio de PHP. formatos utilizados en session.save_path <https://www.php.net/manual/en/session.configuration.php#ini.session.save-path>`_, y tiene la mayoría de las opciones codificadas por seguridad. En cambio, sólo Se admiten rutas absolutas para cadena pública $savePath.

Otra cosa importante que debes saber es asegurarte de que No utilice un directorio compartido o legible públicamente para almacenar su sesión. archivos. Asegúrate de que solo tú tengas acceso para ver el contenido de tu directorio savePath elegido. De lo contrario, cualquiera que pueda hacer eso, puede también robar cualquiera de las sesiones actuales (también conocido como «fijación de sesión» ataque).

En sistemas operativos tipo UNIX, esto generalmente se logra configurando el 0700 permisos de modo en ese directorio a través del comando chmod, que permite que sólo el propietario del directorio realice operaciones de lectura y escritura en él. Pero tenga cuidado porque el usuario del sistema que ejecuta el script suele ser no el tuyo, sino algo así como “www-data”, por lo que solo configura esos Los permisos probablemente dañarán su aplicación.

En su lugar, deberías hacer algo como esto, dependiendo de tu entorno:

mkdir /<path to your application directory> /escribible/sesiones/
chmod 0700 /<path to your application directory> /escribible/sesiones/
chown www-datos /<path to your application directory> /escribible/sesiones/

Consejo adicional

Algunos de ustedes probablemente optarán por elegir otro controlador de sesión porque El almacenamiento de archivos suele ser más lento. Esto es sólo una verdad a medias.

Una prueba muy básica probablemente le hará creer que un SQL La base de datos es más rápida, pero en el 99% de los casos, esto sólo es cierto mientras Sólo tengo algunas sesiones actuales. A medida que las sesiones cuentan y el servidor se carga aumento - que es el momento en el que importa - el sistema de archivos superan consistentemente a casi todas las configuraciones de bases de datos relacionales.

Además, si el rendimiento es su única preocupación, es posible que desee buscar en el uso de tmpfs<https://eddmann.com/posts/storing-php-sessions-file-caches-in-memory-using-tmpfs/> _, (advertencia: recurso externo), lo que puede hacer que sus sesiones sean increíblemente rápidas.

Controlador del controlador de base de datos

Importante

Only MySQL and PostgreSQL databases are officially apoyado, debido a la falta de mecanismos de bloqueo de asesoramiento en otros plataformas. El uso de sesiones sin bloqueos puede provocar todo tipo de problemas. problemas, especialmente con el uso intensivo de AJAX, y no lo haremos apoyar tales casos. Utilice el método cerca() después de haber terminado de procesar los datos de la sesión si está teniendo rendimiento asuntos.

El controlador “DatabaseHandler” utiliza una base de datos relacional como MySQL o PostgreSQL para almacenar sesiones. Esta es una opción popular entre muchos usuarios, porque permite al desarrollador acceder fácilmente a los datos de la sesión dentro una aplicación: es simplemente otra tabla en su base de datos.

Sin embargo, hay algunas condiciones que deben cumplirse:

  • NO puedes utilizar una conexión persistente.

Configurar el controlador de Base de datos

Nombre de la tabla de configuración

Para utilizar el controlador de sesión “DatabaseHandler”, también debe crear este tabla que ya mencionamos y luego configúrala como tu Valor $savePath. Por ejemplo, si desea utilizar “HIGGS_sessions” como nombre de su tabla, harías esto:

<?php

namespace Config;

use Higgs\Config\BaseConfig;
use Higgs\Session\Handlers\FileHandler;

class Session extends BaseConfig
{
    // ...
    public string $driver = 'Higgs\Session\Handlers\DatabaseHandler';

    // ...
    public string $savePath = 'HIGGS_sessions';

    // ...
}
Crear tabla de base de datos

Y luego por supuesto, crear la tabla de la base de datos…

Para MySQL:

CREAR TABLA SI NO EXISTE `HIGGS_sessions` (
    `id` varchar(128) NO nulo,
    `dirección_ip` varchar(45) NO nulo,
    `marca de tiempo` marca de tiempo DEFAULT CURRENT_TIMESTAMP NO nulo,
    blob `datos` NO nulo,
    CLAVE `HIGGS_sessions_timestamp` (`marca de tiempo`)
);

Para PostgreSQL:

CREAR TABLA "HIGGS_sessions" (
    "id" varchar(128) NO NULO,
    "dirección_ip" inet NO NULO,
    "marca de tiempo" marca de tiempo DEFAULT CURRENT_TIMESTAMP NOT NULL,
    "datos" bytea DEFAULT '' NO NULO
);

CREAR ÍNDICE "HIGGS_sessions_timestamp" EN "HIGGS_sessions" ("marca de tiempo");

Nota

The id value contains the session cookie name (Config\Session::$cookieName) y el ID de sesión y un delimitador. Se debe aumentar según sea necesario, por ejemplo, cuando se utilizan ID de sesión largas.

Agregar clave principal

También necesitarás agregar una CLAVE PRIMARIA dependiendo de tu $matchIP configuración. Los siguientes ejemplos funcionan tanto en MySQL como en PostgreSQL:

// Cuando $matchIP = verdadero
ALTERAR TABLA HIGGS_sessions AÑADIR CLAVE PRIMARIA (id, dirección_ip);

// Cuando $matchIP = falso
ALTERAR TABLA HIGGS_sessions AÑADIR CLAVE PRIMARIA (id);

// Para eliminar una clave principal creada previamente (úsela al cambiar la configuración)
ALTER TABLA HIGGS_sessions DROP PRIMARY KEY;

Importante

If you don’t add the correct primary key, the following error puede ocurrir:

mysqli_sql_exception no detectado: entrada duplicada 'HIGGS_session:***' para la clave 'HIGGS_sessions.PRIMARY'
Cambiar grupo de base de datos

El grupo de base de datos predeterminado se utiliza de forma predeterminada. Puede cambiar el grupo de base de datos a utilizar cambiando la propiedad $DBGroup en el archivo app/Config/Session.php al nombre del grupo a usar:

<?php

namespace Config;

use Higgs\Config\BaseConfig;
use Higgs\Session\Handlers\FileHandler;

class Session extends BaseConfig
{
    // ...
    public ?string $DBGroup = 'groupName';
}
Configurar la tabla de la base de datos con el comando

Si prefiere no hacer todo esto a mano, puede usar el comando make:migration --session desde el cli para generar un archivo de migración para usted:

php spark make:migración --sesión
migración de chispa php

Este comando tendrá en cuenta las configuraciones $savePath y $matchIP cuando genera el código.

Controlador RedisHandler

Nota

Since Redis doesn’t have a locking mechanism exposed, locks for este controlador se emula mediante un valor separado que se mantiene hasta a 300 segundos. Con v7.3.2 o superior, puede conectar Redis con el protocolo TLS.

Redis es un motor de almacenamiento que normalmente se usa para almacenamiento en caché y es popular porque de su alto rendimiento, que probablemente también sea su razón para utilizar el Controlador de sesión “RedisHandler”.

La desventaja es que no es tan omnipresente como las bases de datos relacionales y requiere el phpredis<https://github.com/phpredis/phpredis> _PHP extensión que se instalará en su sistema y esa no viene incluido con PHP. Lo más probable es que solo esté utilizando el controlador RedisHandler si ya está ambos familiarizados con Redis y usándolo para otros fines.

Configurar RedisHandler

Al igual que con los controladores “FileHandler” y “DatabaseHandler”, también debes configurar la ubicación de almacenamiento de sus sesiones a través del Configuración $savePath. El formato aquí es un poco diferente y complicado al mismo tiempo. Es se explica mejor con el archivo README de la extensión phpredis, por lo que simplemente te enlace a el:

Sin embargo, para el caso más común, se debe utilizar un par simple host:puerto. suficiente:

<?php

namespace Config;

use Higgs\Config\BaseConfig;
use Higgs\Session\Handlers\FileHandler;

class Session extends BaseConfig
{
    // ...
    public string $driver = 'Higgs\Session\Handlers\RedisHandler';

    // ...
    public string $savePath = 'tcp://localhost:6379';

    // ...
}

Controlador MemcachedHandler

Nota

Since Memcached doesn’t have a locking mechanism exposed, locks para este controlador se emula mediante un valor separado que se conserva para hasta 300 segundos.

El controlador “MemcachedHandler” es muy similar al “RedisHandler” en todos sus propiedades, excepto quizás por la disponibilidad, porque Memcached de PHP la extensión se distribuye a través de PECL y algunos Las distribuciones de Linux lo ponen a disposición como un paquete fácil de instalar.

Aparte de eso, y sin ningún sesgo intencional hacia Redis, hay No hay mucha diferencia que decir sobre Memcached: también es un popular Producto que normalmente se utiliza para el almacenamiento en caché y es famoso por su velocidad.

Sin embargo, cabe señalar que la única garantía que ofrece Memcached es que configurar el valor X para que caduque después de Y segundos resultará en que se eliminado después de que hayan pasado Y segundos (pero no necesariamente que no caducan antes de esa fecha). Esto sucede muy raramente, pero debe ser considerado ya que puede resultar en la pérdida de sesiones.

Configurar MemcachedHandler

El formato $savePath es bastante sencillo aquí, siendo sólo un par host:puerto:

<?php

namespace Config;

use Higgs\Config\BaseConfig;
use Higgs\Session\Handlers\FileHandler;

class Session extends BaseConfig
{
    // ...
    public string $driver = 'Higgs\Session\Handlers\MemcachedHandler';

    // ...
    public string $savePath = 'localhost:11211';

    // ...
}

Consejo adicional

Configuración multiservidor con un parámetro opcional peso como También se admite el tercer valor separado por dos puntos (:peso), pero tenemos Cabe señalar que no hemos probado si eso es confiable.

Si desea experimentar con esta función (bajo su propio riesgo), simplemente separe las múltiples rutas del servidor con comas:

<?php

namespace Config;

use Higgs\Config\BaseConfig;
use Higgs\Session\Handlers\FileHandler;

class Session extends BaseConfig
{
    // ...

    // localhost will be given higher priority (5) here,
    // compared to 192.0.2.1 with a weight of 1.
    public string $savePath = 'localhost:11211:5,192.0.2.1:11211:1';

    // ...
}