解決 Laravel 因瀏覽器返回按鈕重複出現快閃記憶體 (一次性 Session)

zxb發表於2019-08-30

用過 laravel 的同學應該都知道一次性 session。只會保留到下個 HTTP 請求到來之前,然後就會被刪除,通常用來做彈出提示。

但是經常會遇到使用者點選瀏覽器 返回按鈕,導致提示又出現了一次,電腦和手機瀏覽器都是這樣。

這是因為瀏覽器返回動作是沒有新的請求,只是本地 返回。

那筆者的思路就是通過 js 在瀏覽器中快取一個標誌用來記錄快閃記憶體是否已經被使用。同學可以通過下面程式碼思路自行修改:

// 基礎的判斷,php是否有快閃記憶體
@if(session()->has('success')) 
        // 繼續判斷瀏覽器是否有快取並且等於該快閃記憶體
        if (sessionStorage.getItem('sessiontoastr') !== '{{ session('success') }}') {

            // 記錄標誌,存的值就是快閃記憶體的值
            sessionStorage.setItem('sessiontoastr', '{{ session('success') }}');

            // 彈出提示(這裡做自己的快閃記憶體動作)
            toastr.success('{{ session('success') }}'); 
        } else {
            // 刪不刪除標誌都可以
            sessionStorage.removeItem('sessiontoastr');
        }
@endif

注意:該程式碼也有bug,比如瀏覽器的前進按鈕,如有更好方案,歡迎討論。

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章