ホームページ  >  に質問  >  本文

Laravelでは、アクセスされたルートに基づいてセッション時間を動的に延長することは可能ですか?

<p>タイトルは私の問題をほぼ要約しています。 </p> <p>私が働いている会社には、<code>config/session.php</code> のセッション時間が <strong>120 分</strong> で期限切れになるように設定されている Laravel アプリケーションがあります。これがデフォルトの動作です。この値は変更したくありません。 </p> <p>ただし、このシステムにはユーザーが多数のフォームやアンケートに回答しなければならないという特殊な機能があり、ユーザーの入力が遅い場合、完了するまでに 3 ~ 4 時間以上かかる場合があります</ Strong>送信する前に戻る いくつかの答えを再検討してください。 </p> <p>問題は、一部のユーザーがまだすべての質問を完了しておらず、セッションの有効期限が切れると進行状況が失われ、数分後に「次のページ」に切り替えたときに初めてセッションの有効期限が切れたことに気づく場合があることです。 」という質問。すでに入力されているデータを保存することも考えましたが、AJAX 呼び出しを使用してコンテンツを永続化し、すでに入力されているセクションをデータベースに保存したとしても、フォームに回答するときに再度ログインする必要があるのは依然として悪いユーザー エクスペリエンスです。とにかく従うには、もう一度フォーム ページにリンクしてください。セッションの有効期限が切れたことにより、お客様から多くの苦情が寄せられています。 </p> <p>最善の解決策は、<code>FormController.php</code> に何らかの関数を作成し、ユーザーがフォーム ページまたはその他の特定のルートに入ったときに、<code>session のようなものを実行することです。 () オペレーション ->extendSessionInMinutes(360)。いくつか調査しましたが、Laravel ドキュメント (<code>Laravel 8.1</code> を使用していることに注意してください) または Stackoverflow で同様のものを見つけることができませんでした。今週は、ユーザーの役割などに基づいて異なるセッション ライフサイクルを提供する新しいミドルウェアの作成に関するソリューションなど、このトピックについて多くの記事を読みましたが、このオプションは機能しませんでした。 </p> <p>同様のソリューションを使用して <strong>新しい変数</strong> <code>session()->put('time_to_logout' , now()- を追加するソリューションに取り組んでいます。 >addHours( 2))</code> セッションが 2 時間に達する時間を正確に知るため、デフォルトの <code>SESSION_LIFETIME</code></strong> の有効期間を長く設定できます。値を 5 時間に設定し、ログアウトが必要かどうかを 30 分ごとにチェックする JS 関数を追加し、ユーザーをログアウト ページにリダイレクトします。ユーザーがフォーム ページにいる場合はチェックを停止します。 </p> <p>しかし、これが実際に良い解決策であるとは思いませんが、別の解決策が思いつかないようです。何らかの方法でセッション時間を延長して、希望を達成する方法はありますか?または、ユーザーに影響を与えずにセッションを再作成し (<em>これではフォーム上の CSRF トークンが台無しになると思います</em>)、ユーザーがフォームへの入力を続けるまで 2 時間かかります。上記の時間は、何もせずにセッションをシームレスに再作成します。何か変化に気づきましたか? </p> <p>セッションが作成されると、その有効期限は変更できませんか? Laravelのデフォルトのセッション関連機能をあまり変更せずに役立つ、ある種のPHPライブラリはありますか? </p> <p><em>コメントをいただきありがとうございます。 </em></p>
P粉019353247P粉019353247386日前559

全員に返信(1)返信します

  • P粉978551081

    P粉9785510812023-09-02 00:13:22

    ######はい、大丈夫です###。そして、次のことを行う必要があります -

    セッションのライフサイクルは、ミドルウェア
      を通じてのみ動的に変更できます。セッションはすでに開始されているため、コントローラ
    1. (ミドルウェアなし) を介して変更してもセッション値 は変更されません。したがって、ミドルウェアが必要になります。このような-### リーリー その後、app/Http/Kernel.php ファイルの $middlewarePriority 配列にミドルウェアを追加する必要があります。これは、Laravel が独自の「StartSession」ミドルウェアを実行する前に実行する必要があります。このような-###
      \App\Http\Middleware\ChangeSessionValueDynamically::class,
    1. \Illuminate\Session\Middleware\StartSession::class,
    の前に追加します。

    リーリー 次のように \App\Http\Middleware\ChangeSessionValueDynamically::class のエイリアスを指定します -

      リーリー
    1. 次のようにルートにミドルウェアを含めます -
    2. リーリー

      返事
      0
  • キャンセル返事