80 lines
2.1 KiB
PHP
80 lines
2.1 KiB
PHP
<?php
|
|
|
|
namespace App\Services;
|
|
|
|
use Illuminate\Support\Facades\Log;
|
|
use Illuminate\Support\Facades\Session;
|
|
|
|
/**
|
|
* Zentrale Session-Bereinigung
|
|
*
|
|
* Verhindert Error-Message-Persistierung durch intelligente Session-Bereinigung
|
|
* vor dem Speichern. Wird von allen Controllern und Services verwendet.
|
|
*/
|
|
class SessionCleaner
|
|
{
|
|
/**
|
|
* Session bereinigen und speichern (verhindert Error-Persistierung)
|
|
*/
|
|
public static function cleanAndSave(string $context = 'unknown'): void
|
|
{
|
|
Log::info("SessionCleaner: Session cleanup - $context", [
|
|
'session_id' => Session::getId(),
|
|
'context' => $context
|
|
]);
|
|
|
|
// Error-Bags bereinigen
|
|
if (Session::has('errors')) {
|
|
Session::forget('errors');
|
|
}
|
|
|
|
// Alte Input-Daten bereinigen
|
|
if (Session::has('_old_input')) {
|
|
Session::forget('_old_input');
|
|
}
|
|
|
|
// Session speichern
|
|
try {
|
|
Session::save();
|
|
Log::info("SessionCleaner: Session cleaned and saved - $context", [
|
|
'session_id' => Session::getId()
|
|
]);
|
|
} catch (\Throwable $e) {
|
|
Log::error("SessionCleaner: Session save failed - $context", [
|
|
'error' => $e->getMessage(),
|
|
'session_id' => Session::getId()
|
|
]);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Nur Error-Messages bereinigen (ohne Session zu speichern)
|
|
*/
|
|
public static function cleanErrors(): void
|
|
{
|
|
// Error-Bags bereinigen
|
|
if (Session::has('errors')) {
|
|
Session::forget('errors');
|
|
}
|
|
|
|
// Alte Input-Daten bereinigen
|
|
if (Session::has('_old_input')) {
|
|
Session::forget('_old_input');
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Session nur speichern (ohne Bereinigung)
|
|
*/
|
|
public static function saveOnly(): void
|
|
{
|
|
try {
|
|
Session::save();
|
|
} catch (\Throwable $e) {
|
|
Log::error("SessionCleaner: Session save failed", [
|
|
'error' => $e->getMessage(),
|
|
'session_id' => Session::getId()
|
|
]);
|
|
}
|
|
}
|
|
}
|