driver = $driver ?? config('session.driver'); } public function getSessionStats(string $driver = null): array { $driver = $driver ?? $this->driver; if (!$this->isSupportedDriver($driver)) return $this->response('warning', 'Driver no soportado o no configurado.', ['session_count' => 0]); try { switch ($driver) { case 'redis': return $this->getRedisStats(); case 'database': return $this->getDatabaseStats(); case 'file': return $this->getFileStats(); default: return $this->response('warning', 'Driver no reconocido.', ['session_count' => 0]); } } catch (\Exception $e) { return $this->response('danger', 'Error al obtener estadísticas: ' . $e->getMessage(), ['session_count' => 0]); } } public function clearSessions(string $driver = null): array { $driver = $driver ?? $this->driver; if (!$this->isSupportedDriver($driver)) { return $this->response('warning', 'Driver no soportado o no configurado.'); } try { switch ($driver) { case 'redis': return $this->clearRedisSessions(); case 'memcached': Cache::getStore()->flush(); return $this->response('success', 'Se eliminó la memoria caché de sesiones en Memcached.'); case 'database': DB::table('sessions')->truncate(); return $this->response('success', 'Se eliminó la memoria caché de sesiones en la base de datos.'); case 'file': return $this->clearFileSessions(); default: return $this->response('warning', 'Driver no reconocido.'); } } catch (\Exception $e) { return $this->response('danger', 'Error al limpiar las sesiones: ' . $e->getMessage()); } } private function getRedisStats() { $prefix = config('cache.prefix'); // Asegúrate de agregar el sufijo correcto si es necesario $keys = Redis::connection('sessions')->keys($prefix . '*'); return $this->response('success', 'Se ha recargado la información de la caché de Redis.', ['session_count' => count($keys)]); } private function getDatabaseStats(): array { $sessionCount = DB::table('sessions')->count(); return $this->response('success', 'Se ha recargado la información de la base de datos.', ['session_count' => $sessionCount]); } private function getFileStats(): array { $cachePath = config('session.files'); $files = glob($cachePath . '/*'); return $this->response('success', 'Se ha recargado la información de sesiones de archivos.', ['session_count' => count($files)]); } /** * Limpia sesiones en Redis. */ private function clearRedisSessions(): array { $prefix = config('cache.prefix', ''); $keys = Redis::connection('sessions')->keys($prefix . '*'); if (!empty($keys)) { Redis::connection('sessions')->flushdb(); // Simulate cache clearing delay sleep(1); return $this->response('success', 'Se eliminó la memoria caché de sesiones en Redis.'); } return $this->response('info', 'No se encontraron claves para eliminar en Redis.'); } /** * Limpia sesiones en archivos. */ private function clearFileSessions(): array { $cachePath = config('session.files'); $files = glob($cachePath . '/*'); if (!empty($files)) { foreach ($files as $file) { unlink($file); } return $this->response('success', 'Se eliminó la memoria caché de sesiones en archivos.'); } return $this->response('info', 'No se encontraron sesiones en archivos para eliminar.'); } private function isSupportedDriver(string $driver): bool { return in_array($driver, ['redis', 'memcached', 'database', 'file']); } /** * Genera una respuesta estandarizada. */ private function response(string $status, string $message, array $data = []): array { return array_merge(compact('status', 'message'), $data); } }