one23/phalcon2laravel

Phalcon 5 DB session adapter in Laravel format

1.0.2 2023-02-26 12:00 UTC

This package is auto-updated.

Last update: 2024-04-26 14:56:03 UTC


README

Phalcon DB session adapter in laravel format

Install

composer require one23/phalcon2laravel

Create default laravel session table

CREATE TABLE `sessions` (
  `id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
  `user_id` bigint unsigned DEFAULT NULL,
  `ip_address` varchar(45) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `user_agent` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci,
  `payload` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
  `last_activity` int NOT NULL,
  PRIMARY KEY (`id`),
  KEY `sessions_user_id_index` (`user_id`),
  KEY `sessions_last_activity_index` (`last_activity`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci

Quick usage

$adapter = new \One23\Phalcon2laravel\Session\Adapter\Db([
    'db' => function() {
        $di = \Phalcon\Di\Di::getDefault();

        return $di->get('db');
    }, // required instance of Phalcon\Db\Adapter\AbstractAdapter
    'table' => 'sessions', // Session table in DB. Default: sessions
    'serialize_handler' => 'php_serialize', // Session serialize handler. For laravel default: serialize_handler 
    'ip' => '127.0.0.1', // User IP. Default: $request->getClientAddress() 
    'user' => function() {
        return 1;
    }, // Closure with return user id (int). Default: null 
    'cookie_name' => 'laravel_session', // required. Laravel session cookie name (required for decrypt)
    'lifetime'      => 3600, // Session lifetime. Default: 3600 
]);

// or with decrypt Laravel active session (can use phalcon + laravel together)

$adapter = new \One23\Phalcon2laravel\Session\Adapter\LaravelDb([
    'db' => function() {
        $di = \Phalcon\Di\Di::getDefault();

        return $di->get('db');
    }, // required instance of Phalcon\Db\Adapter\AbstractAdapter
    'table' => 'sessions', // Session table in DB. Default: sessions
    'serialize_handler' => 'php_serialize', // Session serialize handler. For laravel default: serialize_handler 
    'ip' => '127.0.0.1', // User IP. Default: $request->getClientAddress() 
    'user' => function() {
        return 1;
    }, // Closure with return user id (int). Default: null 
    'laravel_key'    => 'abc123', // required. Laravel app secret
    'laravel_chiper' => 'AES-256-CBC', // Laravel app secret chiper

    'cookie_name' => 'laravel_session', // required. Laravel session cookie name (required for decrypt)
    'lifetime'      => 3600, // Session lifetime. Default: 3600 
]);

$sessionManager = new \One23\Phalcon2laravel\Session\Manager();

$sessionManager
    ->setName($adapter->getLaravelSessionCookieName())
    ->setAdapter($adapter);
    
$sessionManager->start();

API Methods

\One23\Phalcon2laravel\Session\Manager

existId(string $sessionId): bool

$sessionManager->existId('abc123'); // => bool

generateCustomId(): string

$sessionManager->generateCustomId(); // => 'eyJpdiI6IldBcGRIU2p...FnIjoiIn0='

\One23\Phalcon2laravel\Session\Adapter\Db

Cookie session id without encrypt

exist($sessionId): bool

$adapter->exist('abc123'); // => true 

getCookieName(): string

$adapter->getCookieName(); // => 'laravel_session' 

\One23\Phalcon2laravel\Session\Adapter\LaravelDb (extends \One23\Phalcon2laravel\Session\Adapter\Db)

Cookie session id with laravel encrypt

exist($sessionId): bool

$adapter->exist('eyJpdiI6IldBcGRIU2p...FnIjoiIn0='); // => true 

decryptSessionId(string $sessionId): ?string

$adapter->decryptSessionId('eyJpdiI6IldBcGRIU2p...FnIjoiIn0='); // => 'abc123'

encryptSessionId(string $sessionId): ?string

$adapter->encryptSessionId('abc123'); // => 'eyJpdiI6IldBcGRIU2p...FnIjoiIn0='

isEncryptSessionId(string $sessionId): bool

$adapter->isEncryptSessionId('eyJpdiI6IldBcGRIU2p...FnIjoiIn0='); // => true

Security

If you discover any security related issues, please email eugene@krivoruchko.info instead of using the issue tracker.

License

MIT