Dalam Laravel, adakah mungkin untuk memanjangkan masa sesi secara dinamik berdasarkan laluan yang diakses?
P粉019353247
2023-09-01 17:36:54
<p>Tajuk itu merumuskan masalah saya. </p>
<p>Syarikat tempat saya bekerja mempunyai aplikasi Laravel di mana masa sesi pada <code>config/session.php</code> ditetapkan untuk tamat tempoh selepas <strong>120 minit</strong> Kami tidak mahu mengubah nilai ini. </p>
<p>Tetapi sistem mempunyai ciri khusus di mana pengguna perlu menjawab sejumlah besar borang/soal selidik,<strong>jika pengguna lambat menaip, ia mungkin mengambil masa lebih daripada 3 atau 4 jam untuk menyelesaikan</ strong>Kembali sebelum menyerahkan Pertimbangkan semula beberapa jawapan. </p>
<p>Masalahnya ialah sesetengah pengguna masih belum menyelesaikan semua soalan dan tamat tempoh sesi menyebabkan mereka kehilangan kemajuan, dan kadangkala mereka hanya mengetahui selepas beberapa minit bahawa mereka telah beralih ke "halaman seterusnya" soalan. Kami mempertimbangkan untuk menyimpan data yang telah diisi, tetapi walaupun kami meneruskan kandungan dengan panggilan AJAX dan menyimpan bahagian yang sudah diisi ke pangkalan data, perlu log masuk semula apabila menjawab borang masih akan menjadi pengalaman pengguna yang buruk sejak mereka perlu mengikutinya juga, pautan ke halaman borang sekali lagi. Kami menerima banyak aduan daripada pelanggan kerana sesi tamat tempoh. </p>
<p>Penyelesaian terbaik ialah mencipta beberapa jenis fungsi pada <code>FormController.php</code> dan apabila pengguna memasuki halaman borang atau beberapa laluan khusus lain, kami akan melaksanakan sesuatu seperti <code>session () Operasi ->extendSessionInMinutes(360)</code>. Saya melakukan beberapa penyelidikan tetapi tidak menemui apa-apa yang serupa pada dokumentasi Laravel (sila ambil perhatian bahawa kami menggunakan <code>Laravel 8.1</code>) atau Stackoverflow. Baca banyak tentang topik ini minggu ini, seperti penyelesaian tentang mencipta perisian tengah baharu yang menyediakan kitaran hayat sesi berbeza berdasarkan peranan pengguna atau sesuatu seperti itu, tetapi pilihan ini tidak berfungsi untuk kami. </p>
<p>Saya sedang mengusahakan penyelesaian yang akan menggunakan penyelesaian yang serupa untuk menambah <strong>pembolehubah baharu</strong> <kod>session()->put('time_to_logout' , now()- >addHours( 2))</code> untuk mengetahui dengan tepat bila sesi mencapai 2 jam, jadi saya boleh<strong>menetapkan lalai <code>SESSION_LIFETIME</code></strong> nilai kepada 5 jam dan tambah fungsi JS untuk menyemak setiap 30 minit jika log keluar diperlukan dan halakan pengguna ke halaman log keluar, jika dia berada di halaman borang kami akan menghentikan semakan. </p>
<p>Tetapi saya tidak fikir ini sebenarnya penyelesaian yang baik, tetapi saya tidak dapat memikirkan penyelesaian lain.Adakah terdapat cara untuk mencapai apa yang saya mahu dengan memanjangkan masa sesi dalam beberapa cara? Atau buat semula sesi tanpa menjejaskan pengguna (<em>Saya yakin ini akan mengacaukan token CSRF pada borang</em>) dan berikan masa selama 2 jam sementara dia terus mengisi borang di atas masa untuk mencipta semula sesi dengan lancar tanpa perasan sebarang perubahan? </p>
<p>Tidak bolehkah saya menukar masa tamat sesi selepas saya menciptanya? Adakah terdapat beberapa jenis perpustakaan PHP yang boleh membantu saya tanpa mengubah terlalu banyak fungsi berkaitan sesi lalai Laravel? </p>
<p><em>Terima kasih terlebih dahulu untuk sebarang ulasan. </em></p>
Ya, anda boleh. Dan anda perlu melakukan perkara berikut -
di
IlluminateSessionMiddlewareStartSession::class,
之前添加AppHttpMiddlewareChangeSessionValueDynamically::class,
.AppHttpMiddlewareChangeSessionValueDynamically::class
seperti yang ditunjukkan di bawah -