Metode untuk mempertahankan Sesi: Beberapa orang mengatakan untuk menyetel session.timeout=-1, atau angka kurang dari 0. Cara ini pasti tidak memungkinkan. Waktu perhitungan sesi dalam hitungan menit dan harus berupa bilangan bulat yang lebih besar dari atau sama dengan 1. Orang lain mengatakan untuk menyetel session.timeout=99999. Ini juga tidak berhasil, sesi memiliki batas waktu maksimum. Setelah diuji ternyata nilai maksimalnya adalah 24 jam, artinya maksimal yang bisa dimiliki adalah session.timeout=1440, dan 1441 tidak boleh, haha. Lingkungan pengujian saya: win2003+IIS6.0+ASP3.0.
Oleh karena itu, tidak mungkin membuat sesi tidak pernah kedaluwarsa dengan mengatur waktu kedaluwarsa session.timeout. Menulis ke Cookies adalah metode yang lebih baik. Ada banyak tutorial serupa di Internet, jadi saya tidak akan membahasnya di sini! Metode lain adalah dengan menyiapkan iframe tersembunyi di halaman tempat sesi dipertahankan. Sesekali (kali ini kurang dari waktu habis sesi), segarkan halaman kosong di dalam bingkai! Cara pelaksanaannya adalah sebagai berikut:
Tambahkan yang berikut ini ke halaman sesi tempat Anda ingin menyimpannya:
Copy kode kodenya sebagai berikut:
<iframe lebar=0 tinggi=0 src=/blog/SessionKeeper.asp></iframe>
Buat file SessionKeeper.asp di direktori yang sama. XML/HTMLSalin kode
Copy kode kodenya sebagai berikut:
<html>
<kepala>
<meta http-equiv=Segarkan konten=900000;url=sessionKeeper.asp>
<!--Segarkan diri Anda setiap 900 detik untuk berkomunikasi dengan server dan menjaga sesi agar tidak hilang-->
</kepala>
</html>
Metode ini relatif umum, dan ada metode lain yang serupa dengan metode di atas, tetapi metode ini tidak menggunakan meta untuk menyegarkan iframe yang disarangkan secara otomatis. Dia menggunakan javascript:window.setTimeout(functionname(),10000); untuk secara otomatis memanggil fungsi pada interval waktu tertentu. Metode spesifiknya adalah sebagai berikut:
Tambahkan: Salin kode JavaScript ke sesi yang akan dipertahankan
Copy kode kodenya sebagai berikut:
<skrip id=Bahasa belakang=javascript></script>
<bahasa skrip=javascript>
fungsi menjaga sesi(){
document.all[Kembali].src=/blog/SessionKeeper.asp?RandStr=+Math.random();
//RandStr=Math.random di sini hanya untuk membuat nilai back.src berbeda setiap kali untuk mencegah penyegaran alamat yang sama menjadi tidak valid.
window.setTimeout(keepsession(),900000); //Panggil dirinya sendiri setiap 900 detik
}
sesi simpanan();
</script>Dengan cara ini, cukup buat file sessionKeeper.asp dengan konten kosong di direktori yang sama!
Masalahnya belum terpecahkan: Seharusnya tidak ada masalah dengan mempertahankan sesi melalui metode di atas. Nilai default IIS untuk menghapus sesi tanpa permintaan adalah 20 menit. tapi itu memakan waktu sekitar satu hari bagi saya. Setelah sekian lama, sesi tersebut masih hilang tanpa alasan! tertekan.
Belakangan saya mencari di banyak tempat di Internet dan akhirnya menemukan jawabannya: Ternyata untuk melindungi server, IIS punya konsep daur ulang! Setelah sekian lama menguji, akhirnya saya mendapatkan pemahaman umum (jangan menertawakan saya^-^). Pertama mari kita lihat di mana daur ulang ini dilakukan.
Mulai IIS Manager->Application Pool->Klik kanan->Properties->Recycle tab. Ada satu item yang berfungsi secara default, yaitu item pertama: Recycle Work Process (Menit). 29 jam. Apa maksudnya? Pemahaman pribadi saya: Semua sesi yang sedang berlangsung akan dihapus secara otomatis 1740 menit setelah session.timeout. Nilai ini dapat diatur ke maksimum 4.000.000, yaitu kira-kira lebih dari 2.700 hari! Saya langsung membatalkannya tanpa dia otomatis mendaur ulangnya! Masalahnya akhirnya terpecahkan.
Selain itu, ada beberapa item lain di kotak dialog properti ini:
Item kedua harus didaur ulang ketika jumlah pengguna yang terhubung melebihi jumlah tertentu.
Item ketiga adalah mendaur ulangnya secara otomatis pada waktu tertentu.
Di tab Performance, matikan proses pekerja setelah idle selama jangka waktu ini. Di sinilah waktu session.timeout default IIS diatur. Nilai defaultnya adalah 20 menit. Nilai maksimum di sini juga dapat diatur ke 4000000, berbeda dengan pengaturan nilai maksimum session.timeout ke 1440 di halaman ASP. Saya belum menguji apakah menetapkan nilai lebih besar dari 1440 di sini akan berhasil. Jadi mengapa nilai maksimum session.timeout di halaman ASP hanya 1440, tetapi dapat diatur begitu besar di properti IIS? Ini harus menjadi mekanisme perlindungan: setiap pengguna dapat mengatur nilai session.timeout pada halaman ASP, tetapi hanya administrator yang dapat mengaturnya di IIS. Keduanya memiliki izin berbeda, sehingga rentang pengaturannya berbeda.