Skip to content

Latest commit

 

History

History
786 lines (551 loc) · 15.7 KB

README.md

File metadata and controls

786 lines (551 loc) · 15.7 KB

PHP Session library

Latest Stable Version License Total Downloads CI CodeCov PSR1 PSR4 PSR12

Traducciones: English

Biblioteca PHP para manejo de sesiones.



Requisitos

  • Sistema operativo: Linux | Windows.

  • Versiones de PHP: 8.0 | 8.1 | 8.2 | 8.3.

Instalación

La mejor forma de instalar esta extensión es a través de Composer.

Para instalar PHP Session library, simplemente escribe:

composer require josantonius/session

El comando anterior sólo instalará los archivos necesarios, si prefieres descargar todo el código fuente puedes utilizar:

composer require josantonius/session --prefer-source

También puedes clonar el repositorio completo con Git:

git clone https://github.com/josantonius/php-session.git

Clases disponibles

Clase Session

Josantonius\Session\Session

Iniciar la sesión:

/**
 * @throws HeadersSentException        si los _headers_ ya se enviaron.
 * @throws SessionStartedException     si la sesión ya está iniciada.
 * @throws WrongSessionOptionException si hay algún fallo con las opciones.
 * 
 * @see https://php.net/session.configuration para ver la lista de opciones disponibles.
 */
public function start(array $options = []): bool;

Comprobar si la sesión fue iniciada:

public function isStarted(): bool;

Establecer un atributo por su nombre:

/**
 * @throws SessionNotStartedException si la sesión no está iniciada.
 */
public function set(string $name, mixed $value): void;

Obtener un atributo por su nombre:

/**
 * Opcionalmente define un valor por defecto cuando el atributo no existe.
 */
public function get(string $name, mixed $default = null): mixed;

Obtener todos los atributos:

public function all(): array;

Comprobar si un atributo existe en la sesión:

public function has(string $name): bool;

Establecer múltiples atributos de una vez:

/**
 * Si los atributos existen se sustituyen, si no existen se crean.
 * 
 * @throws SessionNotStartedException si la sesión no está iniciada.
 */
public function replace(array $data): void;

Eliminar un atributo por su nombre y devolver su valor:

/**
 * Opcionalmente define un valor por defecto cuando el atributo no existe.
 * 
 * @throws SessionNotStartedException si la sesión no está iniciada.
 */
public function pull(string $name, mixed $default = null): mixed;

Eliminar un atributo por su nombre:

/**
 * @throws SessionNotStartedException si la sesión no está iniciada.
 */
public function remove(string $name): void;

Liberar todas las variables de la sesión:

/**
 * @throws SessionNotStartedException si la sesión no está iniciada.
 */
public function clear(): void;

Obtiene el ID de la sesión:

public function getId(): string;

Establecer el ID de la sesión:

/**
 * @throws SessionStartedException si la sesión ya está iniciada.
 */
public function setId(string $sessionId): void;

Actualizar el ID de la sesión actual con uno recién generado:

/**
 * @throws SessionNotStartedException si la sesión no está iniciada.
 */
public function regenerateId(bool $deleteOldSession = false): bool;

Obtener el nombre de la sesión:

public function getName(): string;

Establecer el nombre de la sesión:

/**
 * @throws SessionStartedException si la sesión ya está iniciada.
 */
public function setName(string $name): void;

Eliminar la sesión:

/**
 * @throws SessionNotStartedException si la sesión no está iniciada.
 */
public function destroy(): bool;

Fachada Session

Josantonius\Session\Facades\Session

Iniciar la sesión:

/**
 * @throws HeadersSentException        si los _headers_ ya se enviaron.
 * @throws SessionStartedException     si la sesión ya está iniciada.
 * @throws WrongSessionOptionException si hay algún fallo con las opciones.
 * 
 * @see https://php.net/session.configuration para ver la lista de opciones disponibles.
 */
public static function start(array $options = []): bool;

Comprobar si la sesión fue iniciada:

public static function isStarted(): bool;

Establecer un atributo por su nombre:

/**
 * @throws SessionNotStartedException si la sesión no está iniciada.
 */
public static function set(string $name, mixed $value): void;

Obtener un atributo por su nombre:

/**
 * Opcionalmente define un valor por defecto cuando el atributo no existe.
 */
public static function get(string $name, mixed $default = null): mixed;

Obtener todos los atributos:

public static function all(): array;

Comprobar si un atributo existe en la sesión:

public static function has(string $name): bool;

Establecer múltiples atributos de una vez:

/**
 * Si los atributos existen se sustituyen, si no existen se crean.
 * 
 * @throws SessionNotStartedException si la sesión no está iniciada.
 */
public static function replace(array $data): void;

Eliminar un atributo por su nombre y devolver su valor:

/**
 * Opcionalmente define un valor por defecto cuando el atributo no existe.
 * 
 * @throws SessionNotStartedException si la sesión no está iniciada.
 */
public static function pull(string $name, mixed $default = null): mixed;

Eliminar un atributo por su nombre:

/**
 * @throws SessionNotStartedException si la sesión no está iniciada.
 */
public static function remove(string $name): void;

Liberar todas las variables de la sesión:

/**
 * @throws SessionNotStartedException si la sesión no está iniciada.
 */
public static function clear(): void;

Obtiene el ID de la sesión:

public static function getId(): string;

Establecer el ID de la sesión:

/**
 * @throws SessionStartedException si la sesión ya está iniciada.
 */
public static function setId(string $sessionId): void;

Actualizar el ID de la sesión actual con uno recién generado:

/**
 * @throws SessionNotStartedException si la sesión no está iniciada.
 */
public static function regenerateId(bool $deleteOldSession = false): bool;

Obtener el nombre de la sesión:

public static function getName(): string;

Establecer el nombre de la sesión:

/**
 * @throws SessionStartedException si la sesión ya está iniciada.
 */
public static function setName(string $name): void;

Eliminar la sesión:

/**
 * @throws SessionNotStartedException si la sesión no está iniciada.
 */
public static function destroy(): bool;

Excepciones utilizadas

use Josantonius\Session\Exceptions\HeadersSentException;
use Josantonius\Session\Exceptions\SessionException;
use Josantonius\Session\Exceptions\SessionNotStartedException;
use Josantonius\Session\Exceptions\SessionStartedException;
use Josantonius\Session\Exceptions\WrongSessionOptionException;

Uso

Ejemplos de uso para esta biblioteca:

Iniciar la sesión sin establecer opciones

use Josantonius\Session\Session;

$session = new Session();

$session->start();
use Josantonius\Session\Facades\Session;

Session::start();

Iniciar la sesión estableciendo opciones

use Josantonius\Session\Session;

$session = new Session();

$session->start([
    // 'cache_expire' => 180,
    // 'cache_limiter' => 'nocache',
    // 'cookie_domain' => '',
    'cookie_httponly' => true,
    'cookie_lifetime' => 8000,
    // 'cookie_path' => '/',
    'cookie_samesite' => 'Strict',
    'cookie_secure'   => true,
    // 'gc_divisor' => 100,
    // 'gc_maxlifetime' => 1440,
    // 'gc_probability' => true,
    // 'lazy_write' => true,
    // 'name' => 'PHPSESSID',
    // 'read_and_close' => false,
    // 'referer_check' => '',
    // 'save_handler' => 'files',
    // 'save_path' => '',
    // 'serialize_handler' => 'php',
    // 'sid_bits_per_character' => 4,
    // 'sid_length' => 32,
    // 'trans_sid_hosts' => $_SERVER['HTTP_HOST'],
    // 'trans_sid_tags' => 'a=href,area=href,frame=src,form=',
    // 'use_cookies' => true,
    // 'use_only_cookies' => true,
    // 'use_strict_mode' => false,
    // 'use_trans_sid' => false,
]);
use Josantonius\Session\Facades\Session;

Session::start([
    'cookie_httponly' => true,
]);

Comprobar si la sesión fue iniciada

use Josantonius\Session\Session;

$session = new Session();

$session->isStarted();
use Josantonius\Session\Facades\Session;

Session::isStarted();

Establecer un atributo por su nombre

use Josantonius\Session\Session;

$session = new Session();

$session->set('foo', 'bar');
use Josantonius\Session\Facades\Session;

Session::set('foo', 'bar');

Obtener un atributo por su nombre sin establecer valor por defecto

use Josantonius\Session\Session;

$session = new Session();

$session->get('foo'); // null si el atributo no existe
use Josantonius\Session\Facades\Session;

Session::get('foo'); // null si el atributo no existe

Obtener un atributo por su nombre estableciendo valor por defecto

use Josantonius\Session\Session;

$session = new Session();

$session->get('foo', false); // false si el atributo no existe
use Josantonius\Session\Facades\Session;

Session::get('foo', false); // false si el atributo no existe

Obtener todos los atributos

use Josantonius\Session\Session;

$session = new Session();

$session->all();
use Josantonius\Session\Facades\Session;

Session::all();

Comprobar si un atributo existe en la sesión

use Josantonius\Session\Session;

$session = new Session();

$session->has('foo');
use Josantonius\Session\Facades\Session;

Session::has('foo');

Establecer múltiples atributos de una vez

use Josantonius\Session\Session;

$session = new Session();

$session->replace(['foo' => 'bar', 'bar' => 'foo']);
use Josantonius\Session\Facades\Session;

Session::replace(['foo' => 'bar', 'bar' => 'foo']);

Elimina un atributo y devuelve su valor o el valor por defecto si no existe

use Josantonius\Session\Session;

$session = new Session();

$session->pull('foo'); // null si el atributo no existe
use Josantonius\Session\Facades\Session;

Session::pull('foo'); // null si el atributo no existe

Elimina un atributo y devuelve su valor o el valor personalizado si no existe

use Josantonius\Session\Session;

$session = new Session();

$session->pull('foo', false); // false si el atributo no existe
use Josantonius\Session\Facades\Session;

Session::pull('foo', false); // false si el atributo no existe

Eliminar un atributo por su nombre

use Josantonius\Session\Session;

$session = new Session();

$session->remove('foo');
use Josantonius\Session\Facades\Session;

Session::remove('foo');

Liberar todas las variables de la sesión

use Josantonius\Session\Session;

$session = new Session();

$session->clear();
use Josantonius\Session\Facades\Session;

Session::clear();

Obtiene el ID de la sesión

use Josantonius\Session\Session;

$session = new Session();

$session->getId();
use Josantonius\Session\Facades\Session;

Session::getId();

Establecer el ID de la sesión

use Josantonius\Session\Session;

$session = new Session();

$session->setId('foo');
use Josantonius\Session\Facades\Session;

Session::setId('foo');

Actualizar el ID de la sesión actual con uno recién generado

use Josantonius\Session\Session;

$session = new Session();

$session->regenerateId();
use Josantonius\Session\Facades\Session;

Session::regenerateId();

Actualizar el ID de la sesión actual por otro y eliminar la sesión anterior

use Josantonius\Session\Session;

$session = new Session();

$session->regenerateId(true);
use Josantonius\Session\Facades\Session;

Session::regenerateId(true);

Obtener el nombre de la sesión

use Josantonius\Session\Session;

$session = new Session();

$session->getName();
use Josantonius\Session\Facades\Session;

Session::getName();

Establecer el nombre de la sesión

use Josantonius\Session\Session;

$session = new Session();

$session->setName('foo');
use Josantonius\Session\Facades\Session;

Session::setName('foo');

Eliminar la sesión

use Josantonius\Session\Session;

$session = new Session();

$session->destroy();
use Josantonius\Session\Facades\Session;

Session::destroy();

Tests

Para ejecutar las pruebas necesitarás Composer y seguir los siguientes pasos:

git clone https://github.com/josantonius/php-session.git
cd php-session
composer install

Ejecutar pruebas unitarias con PHPUnit:

composer phpunit

Ejecutar pruebas de estándares de código con PHPCS:

composer phpcs

Ejecutar pruebas con PHP Mess Detector para detectar inconsistencias en el estilo de codificación:

composer phpmd

Ejecutar todas las pruebas anteriores:

composer tests

Tareas pendientes

  • Añadir nueva funcionalidad
  • Mejorar pruebas
  • Mejorar documentación
  • Mejorar la traducción al inglés en el archivo README
  • Refactorizar código para las reglas de estilo de código deshabilitadas (ver phpmd.xml y phpcs.xml)
  • Mostrar un ejemplo de renovación de la duración de la sesión
  • ¿Funcionalidad para activar/desactivar excepciones?
  • ¿Funcionalidad para añadir prefijos en los atributos de sesión?

Registro de Cambios

Los cambios detallados de cada versión se documentan en las notas de la misma.

Contribuir

Por favor, asegúrate de leer la Guía de contribución antes de hacer un pull request, comenzar una discusión o reportar un issue.

¡Gracias por colaborar! ❤️

Patrocinar

Si este proyecto te ayuda a reducir el tiempo de desarrollo, puedes patrocinarme para apoyar mi trabajo 😊

Licencia

Este repositorio tiene una licencia MIT License.

Copyright © 2017-actualidad, Josantonius