Seri Kuliah ASP (19) Sesi Pengelolaan
Penulis:Eve Cole
Waktu Pembaruan:2009-05-30 19:58:38
Salah satu tantangan keberhasilan pengembangan aplikasi Web adalah menjaga informasi pengguna saat pengguna berpindah dari halaman ke halaman dalam aplikasi selama kunjungan atau sesi pengguna. HTTP adalah protokol tanpa kewarganegaraan, yang berarti bahwa server Web memperlakukan setiap akses ke halaman sebagai akses yang tidak terkait; server tidak menyimpan informasi apa pun tentang akses sebelumnya, bahkan jika akses tersebut terjadi dalam beberapa hari dari akses saat ini yang lalu. Kurangnya memori dari kunjungan sebelumnya membuat sulit untuk menulis aplikasi seperti katalog online, yang mungkin perlu melacak item katalog yang telah dipilih pengguna saat berpindah antar halaman katalog yang berbeda.
ASP memberikan solusi unik untuk mengelola masalah informasi sesi. Dengan menggunakan objek Sesi ASP dan ID pengguna khusus yang dihasilkan oleh server Anda, Anda dapat membuat aplikasi cerdas yang dapat mengidentifikasi setiap pengguna yang masuk dan mengumpulkan informasi yang digunakan oleh aplikasi untuk melacak preferensi atau pilihan konten pengguna.
ASP menetapkan ID pengguna melalui cookie HTTP. Cookie HTTP adalah file kecil yang disimpan di browser pengguna. Oleh karena itu, jika Anda membuat aplikasi untuk browser yang tidak mendukung cookie, atau jika klien Anda telah menyetel browser mereka untuk tidak menerima cookie, jangan gunakan fungsi manajemen sesi ASP.
Anda juga dapat menulis skrip yang dijalankan saat aplikasi dimulai atau diakhiri.
Memulai dan Mengakhiri Sesi Sesi dapat dimulai dengan tiga cara:
Pengguna baru meminta akses ke URL yang mengidentifikasi file .asp dalam aplikasi yang file Global.asanya berisi prosedur Session_OnStart.
Pengguna menyimpan nilai di objek Sesi.
Pengguna meminta file .asp aplikasi, dan file Global.asa aplikasi menggunakan tag <OBJECT> untuk membuat instance objek dengan cakupan sesi.
Jika pengguna tidak meminta atau menyegarkan halaman apa pun dalam aplikasi selama jangka waktu tertentu, sesi akan berakhir secara otomatis. Nilai default untuk periode ini adalah 20 menit. Anda dapat mengubah pengaturan batas batas waktu default aplikasi dengan mengatur properti "Sesi Timeout" di halaman properti "Opsi Aplikasi" di Internet Services Manager. Nilai ini harus ditetapkan berdasarkan persyaratan aplikasi web Anda dan ruang memori server. Misalnya, jika Anda ingin pengguna yang menjelajahi aplikasi Web Anda tetap berada di setiap halaman hanya selama beberapa menit, Anda harus mempersingkat nilai batas waktu sesi default. Nilai batas waktu sesi yang terlalu lama akan menyebabkan terlalu banyak sesi terbuka sehingga menghabiskan sumber daya memori server Anda.
Untuk sesi tertentu, jika Anda ingin menetapkan nilai batas waktu yang kurang dari nilai batas waktu default, Anda dapat mengatur properti Timeout dari objek Sesi. Misalnya, skrip berikut menetapkan nilai batas waktu menjadi 5 menit.
<%Sesi.Waktu Habis = 5%>
Anda juga dapat menetapkan nilai batas waktu lebih besar dari pengaturan default. Properti Session.Timeout menentukan nilai batas waktu.
Anda juga dapat secara eksplisit mengakhiri sesi melalui metode Abandon pada objek Session. Misalnya, untuk menyediakan tombol Keluar dalam tabel, atur parameter ACTION tombol ke URL file .asp yang berisi perintah berikut.
<% Sesi. Abaikan %>
Tentang SessionID dan Cookie
Saat pengguna pertama kali meminta file .asp di aplikasi tertentu, ASP menghasilkan SessionID. SessionID adalah nomor yang dihasilkan oleh algoritma kompleks yang secara unik mengidentifikasi setiap sesi pengguna. Pada awal sesi baru, server menyimpan ID Sesi sebagai cookie di browser Web pengguna.
SessionID mirip dengan kunci di mana ASP dapat menyimpan informasi pengguna di tempat yang "aman" di server ketika pengguna berinteraksi dengan aplikasi selama sesi. Sama seperti kunci yang dapat digunakan untuk mengakses item di brankas, konten "brankas" juga dapat diakses melalui cookie SessionID pengguna yang dikirim dalam header permintaan HTTP. Setiap kali ASP menerima permintaan halaman, ia memeriksa header permintaan HTTP untuk mendapatkan cookie SessionID.
Setelah cookie SessionID disimpan di browser pengguna, ASP masih menggunakan kembali cookie tersebut untuk melacak sesi meskipun pengguna meminta file .asp lain, atau meminta file .asp yang berjalan di aplikasi lain. Demikian pula, jika pengguna dengan sengaja meninggalkan sesi atau membiarkan waktu sesi habis, lalu meminta file .asp lain, ASP akan memulai sesi baru dengan cookie yang sama. Hanya ketika administrator server me-restart server atau pengguna me-restart browser Web, pengaturan SessionID yang disimpan dalam memori akan dihapus dan pengguna akan mendapatkan cookie SessionID baru.
Dengan menggunakan kembali cookie SessionID, ASP meminimalkan jumlah cookie yang dikirim ke browser pengguna. Alternatifnya, jika Anda memutuskan bahwa aplikasi ASP Anda tidak memerlukan manajemen sesi, Anda dapat mencegah ASP melacak sesi dan mengirimkan SessionID ke pengguna.
ASP tidak mengirimkan cookie sesi dalam kondisi berikut:
Status sesi aplikasi dinonaktifkan.
Halaman ASP didefinisikan sebagai tanpa sesi, yaitu halaman berisi tag <%@ EnableSessionState=False %>.
Harap dicatat bahwa cookie SessionID tidak menyediakan metode permanen untuk melacak pengguna di beberapa kunjungan ke situs Web. Informasi SessionID yang disimpan dalam memori server dapat dengan mudah hilang. Jika Anda ingin melacak pengguna yang mengunjungi aplikasi Web Anda dari waktu ke waktu, Anda harus membuat identitas pengguna dengan menyimpan cookie khusus di browser Web pengguna dan menyimpan informasi cookie di database.
Simpan data di objek Sesi
Objek Session menyediakan array asosiatif dinamis di mana informasi dapat disimpan. Anda dapat menyimpan variabel numerik dan variabel objek di objek Sesi.
Variabel dapat disimpan dalam objek Sesi dengan memberikan nilai ke item bernama di objek Sesi. Misalnya, perintah berikut menyimpan dua variabel baru di objek Session:
<%
Sesi("Nama Depan") = "Jeff"
Sesi("Nama Belakang") = "Smith"
%>
Informasi dapat diperoleh dari objek Sesi dengan mengakses item bernama ini. Misalnya, tampilkan nilai Session("FirstName") saat ini:
Selamat datang <%= Sesi("Nama Depan") %>
Anda dapat menyimpan preferensi pengguna di objek Sesi dan kemudian mengakses preferensi untuk memutuskan halaman mana yang akan dikirim ke pengguna. Misalnya, Anda dapat mengizinkan pengguna menentukan versi konten hanya teks di halaman pertama aplikasi Anda dan menerapkan pilihan ini ke semua halaman aplikasi berikutnya yang dikunjungi pengguna.
<% If Session("ScreenResolution") = "Rendah" Lalu %>
Ini adalah versi teks halaman tersebut.
<%Lain%>
Ini adalah halaman versi multimedia.
<% Selesai Jika %>
Anda juga dapat menyimpan instance objek di objek Sesi, tetapi hal ini akan memengaruhi kinerja server.
Kelola sesi Web Farm
Informasi sesi ASP disimpan di server Web. Browser harus meminta halaman dari server Web untuk mendapatkan skrip yang digunakan untuk mengakses informasi sesi. Di Web Farm (di mana banyak server Web berbagi tanggung jawab untuk menanggapi permintaan pengguna), permintaan pengguna tidak selalu diarahkan ke server yang sama, melainkan ke URL oleh perangkat lunak khusus yang disebut proses "penyeimbangan beban" Aplikasi situs ditugaskan ke server gratis mana pun. Proses penyeimbangan beban mempersulit penyimpanan informasi sesi di Web Farm.
Untuk menggunakan manajemen sesi ASP pada situs dengan beban seimbang, Anda harus memastikan bahwa semua permintaan untuk sesi pengguna diarahkan ke server Web yang sama. Salah satu pendekatannya adalah dengan menulis prosedur Session_OnStart yang menggunakan objek Response untuk mengarahkan browser ke server Web yang menjalankan sesi pengguna. Jika semua link di halaman aplikasi Anda bersifat relatif, maka semua permintaan halaman di masa mendatang akan dialihkan ke server yang sama.
Misalnya, pengguna ingin mengakses aplikasi dengan meminta URL universal situs: http://www.microsoft.com. Proses penyeimbangan beban merutekan permintaan ke server server3.microsoft.com. ASP menghasilkan sesi pengguna baru di server ini. Selama proses Session_OnStart, browser dialihkan ke server yang ditentukan:
<% Response.Redirect("http://server3.microsoft.com/webapps/firstpage.asp") %>
Browser akan meminta halaman tertentu, dan semua permintaan di masa depan akan diarahkan ke server yang sama.
Gunakan cookie
Cookie adalah token yang disematkan oleh server web di browser web pengguna untuk mewakili pengguna. Saat berikutnya browser yang sama meminta halaman, browser tersebut akan mengirimkan cookie yang diterima dari server Web. Cookie memungkinkan serangkaian informasi dikaitkan dengan pengguna. Skrip ASP menggunakan kumpulan Cookie dari objek Respons dan Permintaan untuk mendapatkan dan menetapkan nilai cookie.
Setel cookie
Untuk menetapkan nilai cookie, gunakan Response.Cookies. Jika cookie tidak ada, Response.Cookies akan membuat cookie baru. Misalnya, untuk mengirim nama cookie ("planet") dengan nilai terkait ("Mars") ke browser, gunakan perintah berikut, yang harus muncul sebelum tag <HTML> pada halaman Web Anda:
<% Response.Cookies("planet")="Mars" %>
Jika Anda hanya ingin cookie digunakan selama sesi pengguna saat ini, kirimkan saja cookie tersebut ke browser. Namun, jika Anda ingin mengenali pengguna setelah mereka menghentikan atau memulai ulang browser, Anda harus memaksa browser untuk menyimpan cookie di hard drive komputer. Untuk menyimpan cookie, gunakan properti Expires pada Response.Cookies dan tetapkan tanggal ke hari di masa depan:
<%
Respon.Cookies("planet") = "Mars"
Response.Cookies("planet").Kedaluwarsa = "1 Januari 1999"
%>
Cookie dapat memiliki banyak nilai; cookie seperti itu disebut cookie yang diindeks. Setiap nilai cookie diberi kata kunci; Anda dapat menetapkan nilai kata kunci cookie tertentu. Misalnya:
<% Response.Cookies("planet")("Mars")="SpaceMissions" %>
Jika cookie yang ada memiliki nilai kata kunci tetapi Response.Cookies tidak menentukan nama kata kunci, nilai kata kunci tersebut akan dihapus. Demikian pula, jika cookie yang ada tidak memiliki nilai kata kunci tetapi Response.Cookies menentukan nama dan nilai kata kunci, nilai cookie yang ada akan dihapus dan pasangan nilai kunci baru akan dibuat.
Dapatkan kue
Untuk mendapatkan nilai cookie, gunakan koleksi Request.Cookies. Misalnya, jika permintaan HTTP pengguna menetapkan planet=Mars, pernyataan berikut akan memperoleh nilai Mars:
<%= Permintaan.Cookie("planet") %>
Demikian pula, untuk mendapatkan nilai kata kunci dari cookie yang diindeks, gunakan nama kata kunci. Misalnya, jika pengguna membuat permintaan HTTP berikut:
planet=Mars&Mars=Misi Luar Angkasa
Skrip berikut akan mengembalikan nilai SpaceMissions:
<%= Permintaan.Cookie("planet")("Mars") %>
Mengatur jalur cookie Setiap cookie yang disimpan oleh ASP di browser Web pengguna berisi informasi jalur. Ketika browser meminta file yang lokasinya sama dengan jalur yang ditentukan dalam cookie, maka browser secara otomatis meneruskan cookie tersebut ke server. Secara default, jalur cookie sesuai dengan nama aplikasi yang berisi file .asp yang awalnya menghasilkan cookie. Misalnya, jika file .asp dalam aplikasi bernama UserApplication menghasilkan cookie, maka setiap kali browser Web pengguna mengambil file dalam aplikasi ini, browser Cookie ini juga diteruskan ke server.
Untuk mendeklarasikan jalur cookie yang berbeda dari jalur aplikasi default, gunakan properti Path dari koleksi Response.Cookies ASP. Misalnya, skrip berikut menetapkan jalur SalesApp/Customer/Profiles/ ke cookie bernama Pembelian:
<%
Response.Cookies("Pembelian") = "12"
Response.Cookies("Pembelian").Kedaluwarsa = "1 Januari 2001"
Response.Cookies("Pembelian").Path = "/SalesApp/Pelanggan/Profil/"
%>
Setiap kali browser web yang berisi cookie Pembelian meminta file yang terletak di jalur /SalesApp/Customer/Profiles/ atau subdirektorinya, browser meneruskan cookie tersebut ke server.
Banyak browser Web, termasuk browser Microsoft Internet Explorer 4.0 dan Netscape, mempertahankan jalur cookie. Artinya, jika file yang diminta berbeda dari jalur cookie yang dipesan, browser tidak akan meneruskan cookie tersebut ke server. Misalnya, untuk ASP, direktori virtual /TRAVEL dan /travel adalah aplikasi ASP yang sama, namun untuk browser yang mempertahankan huruf besar/kecil URL, /TRAVEL dan /travel adalah dua aplikasi yang berbeda. Anda harus memastikan bahwa semua URL ke file .asp memiliki huruf yang sama untuk memastikan bahwa browser pengguna dapat meneruskan cookie yang disimpan.
Jika diinginkan, Anda dapat menggunakan pernyataan berikut untuk mengatur jalur cookie sehingga cookie diteruskan setiap kali browser web pengguna meminta file dari server Anda, apa pun aplikasi atau jalurnya:
Respon.Cookies("Pembelian").Path = "/"
Namun, harap dicatat bahwa mengirimkan cookie ke server tanpa membedakan aplikasi dapat menimbulkan masalah keamanan jika cookie berisi informasi sensitif yang tidak boleh diakses oleh program selain aplikasi yang ditunjuk.
Mempertahankan status tanpa menggunakan cookie Tidak semua browser mendukung cookie. Meskipun menggunakan browser yang mendukung cookie, beberapa pengguna mungkin memilih untuk menonaktifkan dukungan cookie. Jika aplikasi Anda perlu merespons browser yang tidak mendukung cookie, Anda harus menggunakan manajemen sesi ASP.
Jika Anda tidak menggunakan manajemen sesi ASP, Anda harus menulis mekanisme Anda sendiri untuk meneruskan informasi antar halaman aplikasi Anda. Ada dua cara umum untuk menyelesaikan tugas ini:
Tambahkan parameter ke string kueri URL. Misalnya:
http://MyServer/MyApp/start.asp?name=Jeff
Namun, beberapa browser akan membuang parameter eksplisit yang diteruskan dalam string kueri saat formulir dikirimkan dengan metode GET.
Tambahkan nilai tersembunyi ke tabel. Misalnya, tabel HTML berikut berisi kontrol implisit. Kontrol ini tidak muncul dalam bentuk sebenarnya dan tidak terlihat oleh browser Web pengguna. Melalui metode HTTP POST, formulir meneruskan ID pengguna selain informasi yang diberikan oleh pengguna.
<FORM METHOD="POST" ACTION="/scripts/inform.asp">
<INPUT TYPE="teks" NAMA="kota" VALUE="">
<INPUT TYPE="teks" NAMA="negara" VALUE="">
<INPUT TYPE="hidden" NAME="userid" VALUE= <%=UserIDNum(i) %>
<INPUT TYPE="kirim" NILAI="Masukkan">
Metode ini mengharuskan semua target tautan yang mentransfer informasi pengguna dikodekan sebagai tabel HTML.
Jika saat ini Anda tidak menggunakan manajemen sesi ASP, nonaktifkan dukungan sesi untuk aplikasi Anda. Ketika sesi diaktifkan, ASP mengirimkan cookie SessionID ke setiap browser yang meminta halaman ASP. Untuk mematikan dukungan sesi, kosongkan kotak centang Aktifkan Status Sesi di halaman properti Opsi Aplikasi di Internet Services Manager.
Halaman ASP tanpa sesi
ASP juga menyediakan kemampuan untuk membuat halaman tanpa sesi, yang dapat Anda gunakan untuk menunda pembuatan sesi hingga pengguna mengakses halaman ASP yang memerlukan pelacakan sesi.
Halaman tanpa sesi tidak menjalankan fungsi berikut:
Jalankan prosedur Session_OnStart.
Kirim cookie ID sesi.
Buat objek Sesi.
Akses objek sesi bawaan atau objek cakupan sesi yang dibuat dengan tag <OBJECT>.
Dieksekusi secara berurutan dengan permintaan sesi lainnya.
Untuk mengonfigurasi .asp menjadi tanpa sesi, gunakan pernyataan berikut:
<%@ EnableSessionState=Salah %>
Anda harus menempatkan skrip ini pada baris pertama file .asp, sebelum skrip lainnya. Secara default, jika tanda ini dihilangkan, pelacakan sesi akan diaktifkan.
Halaman ASP tanpa sesi meningkatkan kinerja respons server dengan menghilangkan operasi sesi yang berpotensi memakan waktu. Misalnya, pertimbangkan situasi berikut: halaman ASP berisi dua frame HTML, Frame 1 dan Frame 2, dalam satu set frame. Frame 1 berisi file .asp yang menjalankan skrip kompleks, sedangkan Frame 2 berisi file .html sederhana. Karena ASP mengeksekusi permintaan sesi secara berurutan (yaitu serial), Anda tidak akan melihat konten frame 2 sampai skrip untuk frame 1 dijalankan. Namun, jika Anda mengatur frame 1 ke sessionless, permintaan ASP tidak lagi diproses secara serial, dan browser tidak perlu menunggu konten frame 1 selesai dieksekusi sebelum dapat memproses konten frame 2.
Namun, cara menangani beberapa permintaan untuk frame berbeda pada akhirnya bergantung pada konfigurasi browser web pengguna. Beberapa browser Web mungkin mengabaikan konfigurasi file .asp Anda yang tidak memiliki sesi dan masih menangani permintaan secara serial.