Kami menemukan formulir yang tak terhitung jumlahnya di Internet setiap hari, dan kami juga melihat bahwa sebagian besar formulir tersebut tidak membatasi pengguna untuk mengirimkan formulir yang sama berkali-kali. Kurangnya pembatasan tersebut terkadang dapat menimbulkan beberapa hasil yang tidak diharapkan, seperti langganan berulang ke layanan email atau pemungutan suara berulang kali. Mungkin beberapa pemula ASP tidak mengetahui cara membatasi pengiriman berulang formulir yang sama di aplikasi ASP, jadi di sini saya akan memperkenalkan kepada Anda metode sederhana untuk mencegah pengguna mengirimkan formulir yang sama beberapa kali selama sesi saat ini di aplikasi ASP.
Pekerjaan ini terutama terdiri dari empat subrutin. Dalam aplikasi yang lebih sederhana, Anda hanya perlu memasukkan kode-kode ini ke dalam file yang disertakan untuk referensi langsung; untuk lingkungan yang lebih kompleks, kami memberikan beberapa saran perbaikan di akhir artikel.
1. Proses kerja dasar
Di bawah ini kita membahas keempat subrutin tersebut secara bergantian.
(1) Inisialisasi
Di sini kita perlu menyimpan dua variabel dalam objek Sesi, di antaranya:
⑴ Setiap bentuk berhubungan dengan pengidentifikasi unik yang disebut FID, dan penghitung digunakan untuk membuat nilai ini unik.
⑵ Setiap kali formulir berhasil dikirimkan, FID-nya harus disimpan dalam objek Kamus.
Kami menggunakan proses khusus untuk menginisialisasi data di atas. Meskipun akan dipanggil oleh setiap subrutin di masa mendatang, hal ini sebenarnya hanya dijalankan satu kali dalam setiap sesi:
Sub InitializeFID()
Jika Bukan IsObject(Session("FIDList")) Lalu
Setel Sesi("FIDList")=Server.CreateObject("Scripting.Dictionary")
Sesi("FID")=0
Akhiri Jika
Sub Akhir
(2) Menghasilkan pengidentifikasi unik formulir.
Fungsi GenerateFID() berikut digunakan untuk menghasilkan pengidentifikasi unik formulir. Fungsi ini pertama-tama menambah nilai FID sebesar 1 lalu mengembalikannya:
Function GenerateFID()
InisialisasiFID
Sesi("FID") = Sesi("FID") + 1
HasilkanFID = Sesi("FID")
Fungsi Akhir
(3) Daftarkan formulir yang dikirimkan.
Ketika formulir berhasil dikirimkan, daftarkan pengenal uniknya di objek Kamus:
Sub RegisterFID()
Redupkan strFID
InisialisasiFID
strFID = Permintaan("FID")
Sesi("Daftar FID").Tambahkan strFID, sekarang()
Sub Akhir
(4) Periksa apakah formulir dikirimkan berulang kali
Sebelum memproses secara formal formulir yang dikirimkan oleh pengguna, Anda harus memeriksa apakah FID-nya telah terdaftar di objek Kamus. Fungsi CheckFID() berikut digunakan untuk menyelesaikan pekerjaan ini. Jika sudah didaftarkan, ia akan mengembalikan FALSE, jika tidak maka akan mengembalikan TRUE:
Fungsi CheckFID().
Redupkan strFID
InisialisasiFID
strFID = Permintaan("FID")
CheckFID = bukan Sesi("Daftar FID").Ada(strFID)
Fungsi Akhir
2. Cara Penggunaan
Fungsi di atas ada dua tempat, yaitu pada saat form dibuat dan pada saat hasilnya diproses. Asumsikan bahwa empat subrutin di atas telah ditempatkan dalam file yang disertakan Forms.inc. Kode berikut menentukan apakah akan menghasilkan formulir atau memproses hasil formulir berdasarkan nilai FID. Proses pemrosesan yang dijelaskan ini cocok untuk sebagian besar aplikasi ASP:
< %Opsi Eksplisit%>
< !--#termasuk file="forms.inc"-->
<HTML>
<KEPALA>
<TITLE>Tes penyerahan formulir</TITLE>
</KEPALA
< TUBUH >
< %
Jika Permintaan("FID") = "" Lalu
Hasilkan Formulir
Kalau tidak
Formulir Proses
Akhiri Jika
%>
</TUBUH>
< /HTML>
GenerateForm bertanggung jawab untuk membuat formulir, yang harus berisi FID tersembunyi, seperti:
< %
SubGenerateForm()
%>
< form action="< %=Request.ServerVariables("PATH_INFO")%>" metode=GET>
< jenis masukan=nama tersembunyi=nilai FID="< %=GenerateFID()%>">
<tipe input=nama teks="param1" value="">
<tipe input=kirim nilai="OK">
</bentuk>
< %
Akhiri Sub
%>
memproses
, CheckFID() harus dipanggil untuk memeriksa apakah formulir saat ini telah dikirimkan.
SubProsesFormulir()
Jika CheckFID() Lalu
Response.Tulis "Yang Anda masukkan adalah" & Request.QueryString("param1")
DaftarFID
Kalau tidak
Response.Tulis "Formulir ini hanya dapat dikirimkan satu kali!"
Akhiri Jika
Akhiri Sub
%>
3. Batasan dan Tindakan Perbaikan
Di atas kami memperkenalkan metode untuk membatasi formulir yang sama dikirimkan beberapa kali selama sesi saat ini. Dalam penerapan praktis, perbaikan mungkin perlu dilakukan di banyak aspek, misalnya:
⑴ Memeriksa legalitas data yang dimasukkan oleh pengguna sebelum mendaftarkan ID formulir, sehingga apabila data tersebut ilegal, pengguna dapat menekan tombol "Kembali" tombol untuk kembali dan mengirimkan formulir yang sama lagi setelah koreksi.
⑵ Pembatasan pengiriman formulir ini hanya berlaku paling lama selama sesi saat ini. Jika pembatasan ini diperlukan untuk menjangkau beberapa sesi, Cookeis atau database akan digunakan untuk menyimpan data yang relevan.