Ist es in Laravel möglich, die Sitzungszeit basierend auf der aufgerufenen Route dynamisch zu verlängern?
<p>Der Titel fasst mein Problem ziemlich gut zusammen. </p>
<p>Das Unternehmen, für das ich arbeite, verfügt über eine Laravel-Anwendung, bei der die Sitzungszeit auf <code>config/session.php</code> nach <strong>120 Minuten</strong> abläuft Wir möchten diesen Wert nicht ändern. </p>
<p>Aber das System verfügt über eine spezielle Funktion, bei der der Benutzer eine große Anzahl von Formularen/Fragebögen beantworten muss.<strong>wenn der Benutzer langsam tippt, kann das Ausfüllen mehr als 3 oder 4 Stunden dauern.</ strong>Zurück vor dem Absenden. Überdenken Sie einige Antworten. </p>
<p>Das Problem besteht darin, dass einige Benutzer immer noch nicht alle Fragen beantwortet haben und durch den Sitzungsablauf den Fortschritt verlieren. Manchmal stellen sie erst nach ein paar Minuten fest, dass die Sitzung abgelaufen ist, wenn sie zur „nächsten Seite“ wechseln " von Fragen. Wir haben darüber nachgedacht, die bereits ausgefüllten Daten zu speichern, aber selbst wenn wir AJAX-Aufrufe verwenden, um den Inhalt beizubehalten und die bereits ausgefüllten Abschnitte in der Datenbank zu speichern, ist es immer noch eine schlechte Benutzererfahrung, sich bei der Beantwortung des Formulars erneut anmelden zu müssen, da sie benötigt werden Um es trotzdem zu verfolgen, verlinken Sie erneut auf die Formularseite. Wir erhalten viele Beschwerden von Kunden wegen abgelaufener Sitzungen. </p>
<p>Die beste Lösung besteht darin, eine Art Funktion in <code>FormController.php</code> zu erstellen und wenn der Benutzer die Formularseite oder eine andere spezifische Route betritt, führen wir so etwas wie <code>session aus () Operation ->extendSessionInMinutes(360)</code>. Ich habe etwas recherchiert, konnte aber weder in der Laravel-Dokumentation (bitte beachten Sie, dass wir <code>Laravel 8.1</code> verwenden) noch in Stackoverflow etwas Ähnliches finden. Diese Woche habe ich viel über dieses Thema gelesen, etwa eine Lösung zum Erstellen einer neuen Middleware, die basierend auf der Benutzerrolle unterschiedliche Sitzungslebenszyklen bereitstellt, oder so etwas in der Art, aber diese Option hat bei uns nicht funktioniert. </p>
<p>Ich arbeite an einer Lösung, die eine ähnliche Lösung verwendet, um eine <strong>neue Variable</strong> hinzuzufügen; >addHours( 2))</code> um genau zu wissen, wann die Sitzung 2 Stunden erreicht, damit ich <strong>die Standardeinstellung von <code>SESSION_LIFETIME</code> festlegen kann Setzen Sie den Wert auf 5 Stunden und fügen Sie eine JS-Funktion hinzu, um alle 30 Minuten zu prüfen, ob eine Abmeldung erforderlich ist, und leiten Sie den Benutzer zur Abmeldeseite weiter. Wenn er sich auf der Formularseite befindet, stoppen wir die Prüfung. </p>
<p>Aber ich glaube nicht, dass das wirklich eine gute Lösung ist, aber mir fällt anscheinend auch keine andere Lösung ein.Gibt es eine Möglichkeit, das zu erreichen, was ich möchte, indem ich die Sitzungszeit auf irgendeine Weise verlängere? Oder erstellen Sie die Sitzung neu, ohne dass sich dies auf den Benutzer auswirkt (<em>ich wette, das wird das CSRF-Token auf dem Formular durcheinander bringen</em>) und geben Sie ihm 2 Stunden Zeit, während er das obige Formular weiter ausfüllt, um die Sitzung nahtlos neu zu erstellen ohne irgendwelche Veränderungen zu bemerken? </p>
<p>Kann ich die Ablaufzeit einer Sitzung nicht ändern, nachdem ich sie erstellt habe? Gibt es eine Art PHP-Bibliothek, die mir helfen kann, ohne die standardmäßige sitzungsbezogene Funktionalität von Laravel zu sehr zu ändern? </p>
<p><em>Vielen Dank im Voraus für alle Kommentare. </em></p>