FlightPHP Sesija - Viegls Failu Bāzes Sesiju Apstrādātājs

Šis ir viegls, failu bāzes sesiju apstrādātāja paplašinājums Flight PHP Framework. Tas nodrošina vienkāršu, taču jaudīgu risinājumu sesiju pārvaldīšanai, ar tādām funkcijām kā neblokējoša sesiju lasīšana, opcionalā šifrēšana, automātiskā apstiprināšana un testa režīms izstrādei. Sesiju dati tiek glabāti failos, padarot to ideāli piemērotu lietojumprogrammām, kurām nav nepieciešama datu bāze.

Ja vēlaties izmantot datu bāzi, apskatiet ghostff/session paplašinājumu ar daudzām no šīm pašām funkcijām, bet ar datu bāzes atbalstu.

Apmeklējiet Github repozitoriju pilnīgai avota kodu un detaļu apskatei.

Instalācija

Uzstādiet paplašinājumu, izmantojot Composer:

composer require flightphp/session

Pamata Lietošana

Šeit ir vienkāršs piemērs, kā izmantot flightphp/session paplašinājumu savā Flight lietojumprogrammā:

require 'vendor/autoload.php';

use flight\Session;

$app = Flight::app();

// Reģistrējiet sesiju pakalpojumu
$app->register('session', Session::class);

// Piemēra maršruta izmantošana ar sesiju
Flight::route('/login', function() {
    $session = Flight::session();
    $session->set('user_id', 123);
    $session->set('username', 'johndoe');
    $session->set('is_admin', false);

    echo $session->get('username'); // Izvade: johndoe
    echo $session->get('preferences', 'default_theme'); // Izvade: default_theme

    if ($session->get('user_id')) {
        Flight::json(['message' => 'Lietotājs ir pieteicies!', 'user_id' => $session->get('user_id')]);
    }
});

Flight::route('/logout', function() {
    $session = Flight::session();
    $session->clear(); // Notīra visus sesiju datus
    Flight::json(['message' => 'Veiksmīgi izrakstījās']);
});

Flight::start();

Galvenie Punkti

  • Neblokējoša: Izmanto read_and_close sesijas sākšanai pēc noklusējuma, novēršot sesijas bloķēšanas problēmas.
  • Automātiska Apstiprināšana: Iespējota pēc noklusējuma, tāpēc izmaiņas tiek saglabātas automātiski izbeigšanās brīdī, ja nav atspējota.
  • Failu Uzglabāšana: Sesijas tiek glabātas sistēmas temp direktorijā zem /flight_sessions pēc noklusējuma.

Konfigurācija

Jūs varat pielāgot sesiju apstrādātāju, pārsūtot opciju masīvu, reģistrējot:

$app->register('session', Session::class, [
    'save_path' => '/custom/path/to/sessions',         // Direktorija sesiju failiem
    'encryption_key' => 'a-secure-32-byte-key-here',   // Iespējot šifrēšanu (32 baiti ieteicami AES-256-CBC)
    'auto_commit' => false,                            // Atspējot automātisko apstiprināšanu manuālai kontrolei
    'start_session' => true,                           // Automātiski uzsākt sesiju (noklusējums: true)
    'test_mode' => false                               // Iespējot testa režīmu izstrādei
]);

Konfigurācijas Opcijas

Opcija Apraksts Noklusējuma Vērtība
save_path Direktorija, kurā glabājas sesiju faili sys_get_temp_dir() . '/flight_sessions'
encryption_key Atslēga AES-256-CBC šifrēšanai (nopietna) null (nav šifrēšanas)
auto_commit Automātiski saglabāt sesiju datus izbeigšanās brīdī true
start_session Automātiski uzsākt sesiju true
test_mode Darbība testa režīmā bez PHP sesiju ietekmes false
test_session_id Pielāgota sesijas ID testa režīmā (opcijas) Nejauši ģenerēts, ja nav iestatīts

Uzlabota Lietošana

Manuāla Apstiprināšana

Ja atspējojat automātisko apstiprināšanu, jums manuāli jāsaglabā izmaiņas:

$app->register('session', Session::class, ['auto_commit' => false]);

Flight::route('/update', function() {
    $session = Flight::session();
    $session->set('key', 'value');
    $session->commit(); // Skaidri saglabāt izmaiņas
});

Sesijas Drošība ar Šifrēšanu

Iespējot šifrēšanu sensitīviem datiem:

$app->register('session', Session::class, [
    'encryption_key' => 'your-32-byte-secret-key-here'
]);

Flight::route('/secure', function() {
    $session = Flight::session();
    $session->set('credit_card', '4111-1111-1111-1111'); // Automātiski šifrēts
    echo $session->get('credit_card'); // Atšifrēts pie atgūšanas
});

Sesijas Atjaunošana

Atjaunojiet sesijas ID drošībai (piemēram, pēc pieteikšanās):

Flight::route('/post-login', function() {
    $session = Flight::session();
    $session->regenerate(); // Jauns ID, saglabā datus
    // VAI
    $session->regenerate(true); // Jauns ID, izdzēš vecos datus
});

Middleware Piemērs

Aizsargājiet maršrutus ar sesiju balstītu autentifikāciju:

Flight::route('/admin', function() {
    Flight::json(['message' => 'Laipni lūdzam administratora panelī']);
})->addMiddleware(function() {
    $session = Flight::session();
    if (!$session->get('is_admin')) {
        Flight::halt(403, 'Piekļuve liegta');
    }
});

Tas ir tikai vienkāršs piemērs, kā izmantot šo vidusdaļā. Detalizētākai piemēram skatiet middleware dokumentāciju.

Metodes

Session klase nodrošina šīs metodes:

  • set(string $key, $value): Glabā vērtību sesijā.
  • get(string $key, $default = null): Atgūst vērtību, ar opciju noklusējuma vērtību, ja atslēga nepastāv.
  • delete(string $key): Noņem specifisku atslēgu no sesijas.
  • clear(): Izdzēš visus sesijas datus.
  • commit(): Saglabā pašreizējos sesijas datus failu sistēmā.
  • id(): Atgriež pašreizējo sesijas ID.
  • regenerate(bool $deleteOld = false): Atjauno sesijas ID, opcionalitātes gadījumā dzēšot vecos datus.

Visas metodes, izņemot get() un id(), atgriež Session instance, lai saistītu izsaukumus.

Kāpēc Izmantot Šo Paplašinājumu?

  • Viegls: Nav ārēju atkarību – tikai faili.
  • Neblokējošs: Novērš sesijas bloķēšanas problēmas ar read_and_close pēc noklusējuma.
  • Drošs: Atbalsta AES-256-CBC šifrēšanu sensitīviem datiem.
  • Elastīgs: Automātiskā apstiprināšana, testa režīms un manuālās kontroles iespējas.
  • Flight-Natīvs: Izstrādāts īpaši Flight framework.

Tehniskās Detaļas

  • Uzglabāšanas Formāts: Sesiju faili tiek prefiksēti ar sess_ un uzglabāti konfigurētajā save_path. Šifrētie dati izmanto E prefiksu, teksta dati izmanto P.
  • Šifrēšana: Izmanto AES-256-CBC ar nejaušu IV katrai sesijas rakstīšanai, kad ir norādīta encryption_key.
  • Atkritumu Vākšana: īsteno PHP SessionHandlerInterface::gc() funkciju, lai notīrītu beigušās sesijas.

Ieguldījumi

Ieguldījumi ir laipni gaidīti! Forkojiet rep(res-zitoriju, veiciet izmaiņas un iesniedziet pull pieprasījumu. Ziņojiet par kļūdām vai ieteiciet funkcijas, izmantojot Github problēmu izsekošanu.

Licences

Šis paplašinājums ir licencēts saskaņā ar MIT licenci. Lai iegūtu detaļas, skatiet Github repozitoriju.