|
51 | 51 | use CodeIgniter\Router\RouteCollectionInterface; |
52 | 52 | use CodeIgniter\Router\Router; |
53 | 53 | use CodeIgniter\Security\Security; |
| 54 | +use CodeIgniter\Session\Handlers\BaseHandler as SessionBaseHandler; |
54 | 55 | use CodeIgniter\Session\Handlers\Database\MySQLiHandler; |
55 | 56 | use CodeIgniter\Session\Handlers\Database\PostgreHandler; |
56 | 57 | use CodeIgniter\Session\Handlers\DatabaseHandler; |
|
88 | 89 | use Config\Toolbar as ToolbarConfig; |
89 | 90 | use Config\Validation as ValidationConfig; |
90 | 91 | use Config\View as ViewConfig; |
| 92 | +use InvalidArgumentException; |
91 | 93 | use Locale; |
92 | 94 |
|
93 | 95 | /** |
@@ -674,17 +676,24 @@ public static function session(?SessionConfig $config = null, bool $getShared = |
674 | 676 |
|
675 | 677 | if ($driverName === DatabaseHandler::class) { |
676 | 678 | $DBGroup = $config->DBGroup ?? config(Database::class)->defaultGroup; |
677 | | - $db = Database::connect($DBGroup); |
678 | 679 |
|
679 | | - $driver = $db->getPlatform(); |
| 680 | + $driverPlatform = Database::connect($DBGroup)->getPlatform(); |
680 | 681 |
|
681 | | - if ($driver === 'MySQLi') { |
| 682 | + if ($driverPlatform === 'MySQLi') { |
682 | 683 | $driverName = MySQLiHandler::class; |
683 | | - } elseif ($driver === 'Postgre') { |
| 684 | + } elseif ($driverPlatform === 'Postgre') { |
684 | 685 | $driverName = PostgreHandler::class; |
685 | 686 | } |
686 | 687 | } |
687 | 688 |
|
| 689 | + if (! class_exists($driverName) || ! is_a($driverName, SessionBaseHandler::class, true)) { |
| 690 | + throw new InvalidArgumentException(sprintf( |
| 691 | + 'Invalid session handler "%s" provided.', |
| 692 | + $driverName |
| 693 | + )); |
| 694 | + } |
| 695 | + |
| 696 | + /** @var SessionBaseHandler $driver */ |
688 | 697 | $driver = new $driverName($config, AppServices::get('request')->getIPAddress()); |
689 | 698 | $driver->setLogger($logger); |
690 | 699 |
|
|
0 commit comments