Tambah logik kawalan bahagian hadapan Apabila pengguna mengklik untuk menyiarkan, lumpuhkan butang "Siar"
Tambah logik kawalan latar belakang Apabila permintaan siaran dihantar, semak sama ada orang itu telah menghantar siaran dengan tajuk dan kandungan yang sama, larang penciptaan siaran pendua ini
Anda boleh menjana id apabila templat dipaparkan, kemudian serahkan id bersama-sama semasa menyerahkan, dan kemudian bandingkan dengan hujung belakang, supaya jika id yang diluluskan tidak betul, maka pemprosesan akan diabaikan.
Halaman semasa menjana id unik Apabila menyerahkan, pelayan menentukan bahawa ia hanya akan diproses sekali. Contohnya, halaman penyerahan borang laravel mempunyai csrf_token
Kemudian tulis csrf anda sendiri di latar belakang Sediakan beberapa idea dan jana kunci secara automatik apabila menyerahkan kandungannya, tetapkan semula kunci itu atau kosongkan hanya penyerahan pendua
Borang kiriman borang melepasi rentetan rawak medan tersembunyi dan masukkannya ke dalam sesi Apabila atur cara menerima rentetan rawak ini dan membandingkannya dengan rentetan dalam sesi, jika ia sama, ia akan diserahkan dan jika ia tidak sama, ia akan menggesa perbandingan ralat Hanya tetapkan semula sesi ini
1. Pengesahan JS, lumpuhkan butang hantar selepas penyerahan 2. Pengesahan sisi pelayan, setiap kali halaman dimuat semula, token akan dihasilkan dalam halaman tersebut dinilai sama ada token itu sah, maka data akan diproses dan token akan dimusnahkan, jika front-end menghantar berulang kali, ia pasti tidak akan diproses kerana token dimusnahkan
Lumpuhkan butang serta-merta selepas mengkliknya Jika penyerahan gagal, pulihkan butang itu, jika tidak, ia akan diubah hala ke halaman kejayaan.
Atau selepas mengklik, topeng akan muncul.
Walau bagaimanapun, kedua-dua penyelesaian di atas memerlukan js. Mengapa anda tidak mahu menggunakan js?
1.Butang JS menghalang klik berulang
2. Kawalan cache sisi pelayan, kaedahnya ialah menulis perpustakaan berulang kali
3 Cipta indeks unik dalam pangkalan data (contohnya, tajuk siaran adalah unik dan tidak boleh diulang)
Boleh dikawal dari hadapan dan belakang:
Tambah logik kawalan bahagian hadapan Apabila pengguna mengklik untuk menyiarkan, lumpuhkan butang "Siar"
Tambah logik kawalan latar belakang Apabila permintaan siaran dihantar, semak sama ada orang itu telah menghantar siaran dengan tajuk dan kandungan yang sama, larang penciptaan siaran pendua ini
Anda boleh menjana id apabila templat dipaparkan, kemudian serahkan id bersama-sama semasa menyerahkan, dan kemudian bandingkan dengan hujung belakang, supaya jika id yang diluluskan tidak betul, maka pemprosesan akan diabaikan.
Pertama, penyelesaian yang lebih mudah ialah menggunakan fungsi nyahlantun untuk mengehadkan kekerapan pencetus panggil balik DOM.
Kedua, jika anda masih perlu mempertimbangkan situasi di mana pengguna melumpuhkan js dalam era ini, maka jangan lakukannya di bahagian hadapan.
Masalah ini tidak boleh diselesaikan dengan bergantung pada bahagian hadapan sahaja.
Tambah caching, gunakan peta untuk mesin tunggal dan gunakan redis untuk caching teragih.
Gunakan prosedur tersimpan Mysql untuk menyerahkan tekanan konkurensi kepada pangkalan data
Kunci, kunci optimistik atau kunci pesimis
Kunci unik
Halaman semasa menjana id unik Apabila menyerahkan, pelayan menentukan bahawa ia hanya akan diproses sekali. Contohnya, halaman penyerahan borang
laravel
mempunyaicsrf_token
Kemudian tulis
csrf
anda sendiri di latar belakang Sediakan beberapa idea dan jana kunci secara automatik apabila menyerahkan kandungannya, tetapkan semula kunci itu atau kosongkan hanya penyerahan penduaBorang kiriman borang melepasi rentetan rawak medan tersembunyi dan masukkannya ke dalam sesi
Apabila atur cara menerima rentetan rawak ini dan membandingkannya dengan rentetan dalam sesi, jika ia sama, ia akan diserahkan dan jika ia tidak sama, ia akan menggesa perbandingan ralat Hanya tetapkan semula sesi ini
1. Pengesahan JS, lumpuhkan butang hantar selepas penyerahan
2. Pengesahan sisi pelayan, setiap kali halaman dimuat semula, token akan dihasilkan dalam halaman tersebut dinilai sama ada token itu sah, maka data akan diproses dan token akan dimusnahkan, jika front-end menghantar berulang kali, ia pasti tidak akan diproses kerana token dimusnahkan