〓Pendahuluan〓
Siapa pun yang memiliki akal sehat tahu bahwa menggunakan ASP untuk melakukan fungsi ini jelas tidak masuk akal, karena ini bukan pesan instan seperti ruang obrolan QQ, MSN atau IRC. Mereka semua mengandalkan penyegaran halaman web untuk mengubah waktu aktivitas terakhir untuk mengetahui apakah pengguna sedang online. Jadi jangan berharap tutorial berikut ini sempurna. Saya hanya mencatat cara berpikir saya. Jika ada yang salah, mohon saran dari ahlinya!
--------------------------------------------------- -----------------------------------
〓Teks〓
Pertama-tama, izinkan saya memperkenalkan kepada Anda ide saya untuk mencapai efek ini. Jika Anda dapat memahaminya setelah membaca ide saya, tidak perlu membaca artikel ini...
Saya hanya dapat memikirkan dua cara untuk mengimplementasikan fungsi ini:
1. basis data+asp
Ini mungkin lebih rumit untuk dilakukan, namun cocok untuk sistem dengan sejumlah besar pengguna yang login.
2. aplikasi
Gunakan objek aplikasi: Jika Anda membangun komunitas besar, Anda mungkin harus membuat aplikasi untuk setiap ID login. Meskipun desain program akan lebih sederhana, ada terlalu banyak pengguna yang masuk dan menghabiskan sumber daya server menganjurkannya di sini. Karena mudah untuk membuat objek aplikasi saat pengguna masuk, tetapi harus dilepaskan sepenuhnya saat pengguna keluar dari sistem
Jadi mari kita lihat cara menggunakan database + asp untuk mengatasi masalah akun yang sama tidak bisa login secara bersamaan!
Pertama minta pengguna untuk membuat database. Di sini kita menggunakan akses untuk membuat onlyNet118.mdb baru.
Data Tabel 1: pengguna menyimpan informasi pendaftaran pengguna
Tabel data berikut telah disiapkan: uID (nomor otomatis) namapengguna (tipe karakter) userPass (tipe karakter)
Tabel Data 2: onlyLogin menyimpan informasi login sementara pengguna
Tabel data berikut telah disiapkan: OLname (tipe karakter) OLtime (tipe tanggal) OLip (tipe karakter)
Setelah database dibangun, kami langsung menambahkan data ke tabel pengguna secara manual, menambahkan Net118 ke tabel userName, dan menambahkan 111 ke tabel userPass Untuk menyorot fokus diskusi kita di artikel ini dan menghilangkan omong kosong yang tidak perlu, kata sandi tidak boleh dienkripsi, dan nama pengguna harus miliknya sendiri
Oke, sekarang sudah ada database pengguna di database. Mari kita buat antarmuka login pengguna. Salin kode berikut dan simpan ke dalam file onlyLogin.asp.
<html>
<kepala>
<meta http-equiv=Jenis Konten konten=teks/html; charset=gb2312>
<title>Net118.COM melarang login simultan pada akun yang sama dari wilayah berbeda</title>
</kepala>
<tubuh>
<nama formulir=metode formulir1=tindakan posting=loginPost.asp>
Nama pengguna: <nama masukan=nama pengguna jenis=teks id=ukuran nama pengguna=15 maxlength=5>
Kata sandi: <nama masukan=tipe userPass=id kata sandi=ukuran userPass=15 maxlength=15>
<tipe input=kirim nama=Kirim nilai=Login>
</bentuk>
</tubuh>
</html>
Setelah selesai, buat file loginCONN.asp baru, salin kode di bawah ini dan simpan! Itu terhubung ke database. Saya tidak akan menjelaskan sebanyak ini...
<%
Redupkan CONN_Net118
Redupkan Sambungan_T
Redupkan mmdd
mmdd=hanyaNet118.mdb
Setel CONN_Net118 = Server.CreateObject(ADODB.Koneksi)
Conn_T=Penyedia=Microsoft.Jet.OLEDB.4.0;Sumber Data= & Server.MapPath(&mmdd&)
pada kesalahan lanjutkan berikutnya
CONN_Net118.Buka Sambungan_T
%>
Selanjutnya kita membuat file loginPost.asp yang juga ada di direktori ini. Ini lebih penting Perhatikan baik-baik kode berikut:
<!--#include file=loginCONN.asp -->
<%
'Hapus pengguna yang aktif dalam waktu maxTime, maxTime telah ditentukan dalam file loginCONN.asp
Conn_Net118.Execute(Hapus Dari onlyLogin di mana DATEDIFF('s',OLtime, now()) > & maxTime & )
' ===== = ===============
Redupkan rs, ts, txt, sql, nama pengguna, userPass
jika Request.Form(Kirim)=Masuk lalu
userName=Request.Form(userName)'Dapatkan formulir nama login pengguna
userPass=Request.Form(userPass)' Dapatkan kata sandi login pengguna formulir
'Karena kami tidak membahas masalah keamanan di sini, kata sandi pengguna tidak dienkripsi.
Setel rs = Server.CreateObject(ADODB.RECORDSET)
sql=PILIH * DARI pengguna dengan nama pengguna = ' & nama pengguna & ' dan userPass = ' & userPass & '
rs.Buka sql, CONN_Net118,1,1
JIKA tidak segera
Panggil isOK(namapengguna) ' Panggil proses ini jika nama pengguna dan kata sandi benar, isOK akan disesuaikan pada program berikut.
kalau tidak
Response.Write(<a href=javascript:history.go(-1)>Nama pengguna atau kata sandi salah</a>)
Respon.Akhir()
berakhir jika
rs.Tutup
Setel rs=Tidak Ada
berakhir jika
Sub isOK(Nama pengguna)
Redupkan Olip 'IP yang disimpan oleh nama pengguna login saat ini di database
Dim Oltime ' Terakhir kali halaman web di-refresh ketika nama pengguna login saat ini disimpan dalam database adalah data penting untuk menghitung apakah pengguna sedang online.
Redupkan OLip1 'Rekam IP login pengguna saat ini, digunakan untuk membedakan apakah pengguna tersebut sama atau tidak.
OLip1=Request.ServerVariables(REMOTE_ADDR)'Dapatkan IP pengguna yang mengirimkan informasi login
Setel ts=Conn_Net118.execute(Pilih * FROM onlyLogin WHERE OLname='& nama pengguna & ')
jika bukan ts.eof maka ' Kueri database untuk melihat apakah ada informasi login untuk pengguna ini
OLwaktu=ts(OLwaktu)
OLip=ts(OLip)
jika OLip1<>OLip dan DateDiff(s,OLtime,now()) < maxTime lalu
'Kalimat sebelumnya menentukan apakah IP pengguna login yang dikirimkan bukan IP pengguna terakhir yang tercatat dalam database dan
'Jika perbedaan antara waktu aktivitas terakhir pengguna dan waktu saat ini tidak melebihi jumlah detik yang ditentukan, maka dipastikan bahwa pengguna sedang online.
Response.Write <a href=javascript:history.go(-1)>Pengguna ini sedang online. Anda tidak dapat masuk ke akun ini dari tempat lain! </a>
Respon.Akhir()
kalau tidak
'Jika tidak, akan ditentukan bahwa login berhasil dan nilainya akan dibayarkan ke sesi tersebut.
Sesi(lgName)=Namapengguna
Sesi(lgPass)=userPass
Respon.Redirect loginOK.asp
Respon.Akhir
berakhir jika
kalau tidak
'Jika database tidak memiliki catatan pengguna login, jalankan pernyataan berikut
Redupkan ls
Setel ls=Server.CreateObject(ADODB.RECORDSET)
ls.OpenSelect * Dari onlyLogin,CONN_Net118,2,2
ls.TAMBAHKAN BARU
ls(NamaOL)=NamaPengguna
ls(OLip)=OLip1
ls(waktu lama)=SEKARANG()
ls.UPDATE
ls.Tutup
Tetapkan ls=Tidak ada
'Tentukan login yang berhasil dan bayar nilai ke sesi
Sesi(lgName)=Namapengguna
Sesi(lgPass)=userPass
Respon.Redirect loginOK.asp
Respon.Akhir
berakhir jika
Akhir Sub %>
Jika Anda dapat memahami file asp, Anda akan tahu sekilas bahwa setelah berhasil login, daun akan melompat ke loginOK.asp Mari kita lihat kode daun ini segera.
<tipe gaya=teks/css>
<!--
badan {warna latar: #FF9900;}
-->
</gaya>
<% JIKA Sesi(lgName)<> lalu %>
Anda telah berhasil login! ! ! Berikut ini adalah iframe yang diselipkan ke dalam halaman web untuk menyegarkan halaman web pada waktu yang ditentukan dan melaporkan ke server apakah Anda sedang online.
Untuk memudahkan pembedaan, kami menggunakan warna putih sebagai warna latar belakang bingkai halaman web.
<iframe border=0 nama=tanggal_baru marginwidth=0 framepacing=0 marginheight=0 src=loginFrame.asp
frameborder=0 noResize lebar=100 gulir=tidak ada tinggi=30 vspale=0></iframe>
<% lain %>
Anda belum login. Selamat datang di jaringan informasi webmaster: http://www.Net118.com
<% berakhir jika %>
Jika Anda termasuk orang yang berhati-hati, Anda akan langsung tahu bahwa yang perlu kita lakukan selanjutnya adalah loginFrame.asp
<!--#include file=loginCONN.ASP -->
<% CONN_Net118.Execute(Perbarui sajaLogin Set OLtime='& SEKARANG() & ' di mana OLname = ' & Session(lgName) & ') %>
<html><head><meta http-equiv=segarkan konten=<%=(maxTime-5)%>;
Oke, sejauh ini program kita selesai. Kunci dari program ini adalah menentukan apakah pengguna sedang online, dan saya tidak punya pilihan selain menggunakan FRAME untuk menyarangkan daun kunci yang disegarkan secara berkala untuk menentukan apakah pengguna sedang online di daun tersebut. dari program utama. Di sini, dalam pengoperasian sebenarnya, Anda dapat mengubah lebar dan tinggi iframe menjadi 0 sehingga pengguna biasa tidak dapat melihatnya, atau membuat warna latar belakang halaman web program utama sama dengan warna latar belakang program utama. bersarang halaman web yang disegarkan secara teratur, dan itu akan baik-baik saja.
Belum lama ini, saya melihat seseorang di forum diskusi mengatakan bahwa hal itu dapat ditentukan dengan menggunakan hal-hal seperti sesi dan cookie. Hal ini jelas tidak mungkin, karena objek yang mereka hasilkan hanya berfungsi pada dirinya sendiri, dan konten datanya tidak dapat dibagikan kepada pengguna lain di semua. Penerapan harus menjadi cara lain untuk mencapai tujuan ini, tetapi saya melepaskan gagasan ini ketika saya berpikir bahwa jika ada banyak pengguna yang masuk pada saat yang sama, setidaknya satu hingga tiga objek penerapan akan dihasilkan untuk setiap pengguna, karena dengan demikian asli kami server yang buruk Pasti akan terseret~