Artikel ini memperkenalkan metode sederhana dalam aplikasi ASP untuk mencegah pengguna mengirimkan formulir yang sama beberapa kali selama sesi saat ini. Ini terutama terdiri dari empat subrutin. Dalam aplikasi yang lebih sederhana, Anda hanya perlu memasukkan kode-kode ini ke dalam file yang disertakan dan langsung mereferensikannya; untuk lingkungan yang lebih kompleks, kami memberikan beberapa saran perbaikan di akhir artikel.
1. Proses kerja dasar
Di bawah ini kita membahas empat subrutin ini secara bergantian.
(1) Inisialisasi
Disini kita perlu menyimpan dua variabel pada objek Session, diantaranya:
⑴ Setiap formulir berhubungan dengan pengidentifikasi unik yang disebut FID, dan penghitung digunakan untuk membuat nilainya menjadi 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 per sesi:
SubInisialisasiFID()
Jika Bukan IsObject(Sesi(FIDList)) Lalu
Setel Sesi(FIDList)=Server.CreateObject(Scripting.Dictionary)
Sesi(FID)=0
Akhiri Jika
Akhiri Sub
(2) Hasilkan pengidentifikasi unik untuk formulir
Fungsi berikut GenerateFID() digunakan untuk menghasilkan pengidentifikasi unik untuk formulir. Fungsi ini pertama-tama akan menambah nilai FID sebanyak 1, lalu mengembalikannya:
FungsiGenerateFID()
Inisialisasi FID
Sesi(FID) = Sesi(FID) + 1
HasilkanFID = Sesi(FID)
Fungsi Akhir
(3) Formulir pendaftaran diserahkan
Ketika formulir berhasil dikirimkan, pengidentifikasi uniknya didaftarkan di objek Kamus:
SubRegistrasiFID()
Redupkan strFID
Inisialisasi FID
strFID = Permintaan(FID)
Sesi(Daftar FID).Tambahkan strFID, sekarang()
Akhiri Sub
(4) Periksa apakah formulir telah diserahkan 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 PeriksaFID()
Redupkan strFID
Inisialisasi FID
strFID = Permintaan(FID)
CheckFID = bukan Sesi(Daftar FID).Ada(strFID)
Fungsi Akhir
2. Cara menggunakan
Fungsi diatas digunakan pada dua tempat yaitu pada saat form digenerate dan pada saat hasil diolah. 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%>
< !--#sertakan 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 menghasilkan formulir, yang harus berisi FID tersembunyi, seperti:
< %
SubGenerateForm()
%>
< tindakan formulir=< %=Request.ServerVariables(PATH_INFO)%> metode=GET>
< jenis masukan=nama tersembunyi=nilai FID=< %=GenerateFID()%>>
<tipe masukan=nama teks=nilai param1=>
<tipe masukan=nilai pengiriman=OK>
</bentuk>
< %
Akhiri Sub
%>
ProcessForm bertanggung jawab untuk memproses konten yang dikirimkan melalui formulir, tetapi sebelum memproses, Anda harus memanggil CheckFID() untuk memeriksa apakah formulir saat ini telah dikirimkan.
< %
SubProsesFormulir()
Jika CheckFID() Lalu
Response.Write Yang Anda masukkan adalah & Request.QueryString(param1)
DaftarFID
Kalau tidak
Response.Write Formulir ini hanya dapat dikirimkan satu kali!
Akhiri Jika
Akhiri Sub
%>
3. Pembatasan dan upaya perbaikan
Di atas kami memperkenalkan cara untuk membatasi formulir yang sama agar tidak dikirimkan beberapa kali selama sesi saat ini. Dalam penerapan praktis, perbaikan mungkin perlu dilakukan dalam banyak aspek, seperti:
⑴ Periksa keabsahan data yang dimasukkan oleh pengguna sebelum mendaftarkan ID formulir, sehingga bila data tersebut ilegal, pengguna dapat menekan tombol kembali untuk kembali dan mengirimkan kembali formulir yang sama 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.
⑶ Metode ini tidak aman. Ini hanya digunakan untuk mencegah penyalahgunaan dan tidak mencegah pengguna terampil mengirimkan formulir yang sama berkali-kali secara sengaja.