Prinsip anti-koleksi sangat sederhana, pertama masukkan pernyataan dinamis untuk menambahkan IP pengunjung ke tabel di database, kemudian tambahkan JS di bagian bawah halaman.JS langsung mengakses halaman dinamis dan menambahkan milik pengunjung IP ke tabel lain di database.
Kemarin saya melihat software anti koleksi di Internet, yang mengatakan bahwa koleksi tersebut hanya mengakses halaman web saat ini, dan tidak mengakses gambar, JS, dll dari halaman web tersebut. Hari ini tiba-tiba terlintas di benak saya bahwa IP pengunjung harus dicatat melalui program dinamis dan akses JS, dan kemudian IP dapat dinilai. JS tidak akan diakses selama proses pengumpulan. Selama pengumpulan, hanya IP yang direkam oleh program dinamis yang akan ditemukan, dan tidak akan ada IP yang direkam oleh JS, sehingga mencegah pengumpulan program halaman web.
Prinsip anti-koleksi sangat sederhana, pertama masukkan pernyataan dinamis untuk menambahkan IP pengunjung ke tabel di database, kemudian tambahkan JS di bagian bawah halaman.JS langsung mengakses halaman dinamis dan menambahkan milik pengunjung IP ke tabel lain di database. Saat mengakses kembali, baca data IP dari kedua tabel, lalu tentukan perbedaan waktunya. Jika hanya ditemukan di tabel pertama tetapi tidak di tabel kedua, atau perbedaan waktu melebihi 10 detik, maka dianggap dikumpulkan. .
keuntungan
1. Penerapan sederhana, asalkan bahasanya dinamis, maka dapat dengan mudah diimplementasikan tanpa memerlukan program sisi server.
2. Memiliki tingkat kematian yang tinggi dan dapat memblokir hampir semua proses pengumpulan.
kekurangan
1. Kerugian pertama adalah tingkat kematiannya yang tinggi. Jika Anda perlu menggunakannya dalam praktik, Anda perlu mempertimbangkan beberapa keadaan khusus untuk menghindari penghentian crawler pencarian secara tidak sengaja.
2. Hanya berlaku untuk halaman web dinamis, halaman statis tidak dapat digunakan.
Prosesnya agak berantakan, tetapi prinsipnya sendiri tidak terlalu rumit. Contoh program terlampir di bawah ini, dan mereka yang mengetahui ASP seharusnya dapat memahaminya dengan cepat.
Contoh program (ASP+ACCESS) (pengunduhan program uji):
1. Buat basis data
Tabel 1: Ip1, bidang Ip1_Adderss (teks), Ip1_Time (tanggal/waktu, default=Sekarang())
Tabel 2: Ip2, bidang Ip2_Adderss (teks), Ip2_Time (tanggal/waktu, default=Sekarang())
2.Index.asp (hanya kode dinamis, silakan lihat program pengujian untuk semua kode)
Salin kode sebagai berikut:<%@LANGUAGE=VBSCRIPT CODEPAGE=936%>
<%
Dim Conn,Rs,Sqlstr,Ip,IpTime,IpTime2,NewUser
NewUser=0
Set Conn = Server.CreateObject(Adodb.Connection)
Set Rs= Server .Buat objek(Adodb.RecordSet)
ConnStr=Provider=Microsoft.Jet.OLEDB.4.0;Sumber Data= & Server.MapPath(Data.mdb)
Conn.Open ConnStr
Ip=Request.ServerVariables(REMOTE_ADDR)
Sqlstr=Pilih * Dari [Ip1] Dimana Ip1_Address='&Ip&' Pesan Berdasarkan Ip1_Id Desc
Rs.Open Sqlstr,Conn,1,3
If Rs.Eof Kemudian
NewUser=1
Application.Lock()
Rs.AddNew()
Rs(Ip1_Address)=Ip
Rs.Update()
Application.UnLock()
Else
IpTime=Rs(Ip1_Time)
Application.Lock()
Rs.AddNew()
Rs(Ip1_Address)=Ip
Rs.Update()
Application.UnLock()
Berakhir Jika
Rs.Close
Jika NewUser=0 Lalu
Sqlstr=Pilih * Dari [Ip2] Where Ip2_Address='&Ip&' Pesan Berdasarkan Ip2_Id Desc
Rs.Open Sqlstr,Conn,1,3
If Rs.Eof Then
Rs.Close
Response.Write (Jangan kumpulkan!)
Response.End()
Lain
IpTime2=Rs(Ip2_Time)
Jika DateDiff(s,IpTime2,IpTime)>10 Kemudian
Rs.Close
Response.Write (Jangan dikumpulkan!)
Response.End()
End If
End If
Rs.Close
End If
%>
3.Js.asp
copy kodenya seperti berikut :
<%
Dim Conn,Rs,Sqlstr,Ip
Set Conn = Server .CreateObject(Adodb.Connection)
Setel Rs=Server.Createobject(Adodb.RecordSet)
ConnStr=Provider=Microsoft.Jet.OLEDB.4.0;Sumber Data= & Server.MapPath(Data.mdb)
Conn.Open ConnStr
Ip=Request.ServerVariables(REMOTE_ADDR)
Sqlstr=Pilih * Dari [Ip2]
Rs.Open Sqlstr,Conn,1,3
Application.Lock()
Rs.AddNew()
Rs (Ip2_Address)=Ip
Rs.Update()
Aplikasi.UnLock()
Rs.Close
%>
4. Kode salinan Get.asp
adalah sebagai berikut:
<%@LANGUAGE=VBSCRIPT CODEPAGE=936%>
<%
Response.Write(Server.HTMLEncode(GetHttpPage(http://localhost/Index.asp,GB2312)))
'= = =============
'Nama fungsi: GetHttpPage
'Fungsi: Dapatkan fungsi kode sumber halaman
' Parameter: URL HttpUrl
'===============
Fungsi GetHttpPage(HttpUrl,Code )
Jika IsNull(HttpUrl)=True Atau HttpUrl= Maka
GetHttpPage=Situs sedang dalam pemeliharaan!
Fungsi Keluar
Berakhir Jika
Pada Kesalahan Lanjutkan Berikutnya
Redupkan Http
Set Http=server.createobject(MSX&ML2.XML&HTTP)
Http.open GET,HttpUrl,False
Http.Send()
Jika Http.Readystate<>4 lalu
Set Http=Nothing
GetHttpPage=B site Sedang dalam pemeliharaan!
Fungsi keluar
Berakhir jika
GetHttpPage=BytesToBSTR(Http.responseBody,Code)
Setel Http=Tidak Ada
Jika Err.number<>0 maka
Err.Clear
GetHttpPage=CSitus sedang dalam pemeliharaan!
Keluar dari fungsi
Akhir Jika
Fungsi Akhir
'===============
'Nama fungsi: BytesToBstr
'Fungsi: Konversiparameter
fungsi pengkodean
': String Body, pengkodean Cset
'===============
Fungsi BytesToBstr(Body,Cset)
Redupkan Objstream
Set Objstream = Server .CreateObject(ado&d&b.st&re&am)
Objstream.Jenis = 1
Objstream.Mode =3
Objstream.Open
Objstream.Write body
Objstream.Position = 0
Objstream.Type = 2
Objstream.Charset = Cset
BytesToBstr = Objstream.ReadText
Objstream.Close
set Objstream = Nothing
End Function
%>
Artikel ini awalnya dibuat oleh Fang Ka Online, Harap sebutkan sumbernya saat mencetak ulang. Kesamaan apa pun hanyalah kebetulan!