Apa perbedaan antara menghancurkan sesi dan menghapus nilainya? Bisakah Anda memberikan contoh yang menunjukkan hal ini?
Saya mencari pertanyaan ini, tetapi tidak menangkap jawaban total. Beberapa jawabannya adalah:
Session.Abandon()
menghancurkan sesiSession.Clear()
hanya menghapus semua nilai
Seorang teman memberi tahu saya ini:
Menghapus sesi tidak akan menghapus sesi, itu masih ada dengan ID yang sama untuk pengguna tetapi dengan nilai yang sudah dihapus.
Pengabaian akan menghancurkan sesi sepenuhnya, artinya Anda perlu memulai sesi baru sebelum Anda dapat menyimpan nilai lainnya di sesi untuk pengguna tersebut.
Kode di bawah ini berfungsi dan tidak memberikan pengecualian apa pun.
Session.Abandon();
Session["tempKey1"] = "tempValue1";
Ketika Anda Abandon () a Session, Anda (atau lebih tepatnya pengguna) akan mendapatkan SessionId baru
Saat saya menguji Sesi, tidak ada perubahan apa pun saat Saya Mengabaikan sesi.
Saya hanya menemukan satu perbedaan:
session.Abandon()
mengangkat Session_End
acara
sumber
Jawaban:
Hapus - Menghapus semua kunci dan nilai dari kumpulan status sesi.
Abaikan - menghapus semua objek yang disimpan dalam Sesi. Jika Anda tidak memanggil metode Abaikan secara eksplisit, server akan menghapus objek ini dan menghancurkan sesi saat sesi habis waktu.
Itu juga memunculkan acara seperti Session_End .
Session.Clear bisa diibaratkan membuang semua buku dari rak , sedangkan Session.Abandon lebih seperti membuang seluruh rak .
Kamu bilang:
Ini benar saat Anda melakukannya hanya dalam satu permintaan .
Pada permintaan berikutnya, sesi akan berbeda. Tapi ID sesi bisa digunakan kembali sehingga id akan tetap sama.
Jika Anda akan menggunakan Session.Clear, Anda akan memiliki sesi yang sama di banyak permintaan.
Umumnya, dalam banyak kasus, Anda perlu menggunakan Session.Clear.
Anda dapat menggunakan Session.Abandon jika Anda yakin pengguna akan meninggalkan situs Anda.
Jadi kembali ke perbedaannya:
sumber
Session.Clear
dapat dibandingkan dengan menghapus semua buku dari rak segera , sementaraSession.Abandon
lebih seperti mengatakan "buang seluruh rak dan beri tahu saya ketika Anda selesai ".Saat Anda
Abandon()
menjadi Sesi, Anda (atau lebih tepatnya pengguna) akan mendapatkan SessionId baru (pada permintaan berikutnya). Saat AndaClear()
menjadi Sesi, semua nilai yang disimpan akan dihapus, tetapi SessionId tetap utuh.sumber
Ini semacam tercakup oleh berbagai tanggapan di atas, tetapi pertama kali saya membaca artikel ini, saya melewatkan fakta penting, yang menyebabkan bug minor dalam kode saya ...
Session.Clear()
akan MENGHAPUS nilai dari semua kunci tetapi TIDAK akan menyebabkan peristiwa akhir sesi diaktifkan.Session.Abandon()
TIDAK akan menghapus nilai pada permintaan saat ini. JIKA halaman lain diminta, nilainya akan hilang untuk halaman itu. Namun, meninggalkan AKAN membuang acara tersebut.Jadi, dalam kasus saya (dan mungkin dalam kasus Anda?), Saya perlu
Clear()
diikutiAbandon()
.sumber
Itu karena ketika metode Abandon dipanggil, objek Session saat ini diantrekan untuk dihapus tetapi tidak benar-benar dihapus sampai semua perintah skrip pada halaman saat ini telah diproses. Artinya, Anda dapat mengakses variabel yang disimpan di objek Session di halaman yang sama dengan panggilan ke metode Abandon, tetapi tidak di halaman Web berikutnya.
Misalnya, dalam skrip berikut, baris ketiga mencetak nilai Mary. Ini karena objek Sesi tidak dihancurkan hingga server selesai memproses skrip.
Jika Anda mengakses variabel MyName di halaman Web berikutnya, itu kosong. Ini karena MyName dihancurkan dengan objek Sesi sebelumnya ketika halaman yang berisi contoh sebelumnya selesai diproses.
dari MSDN Session.Abandon
sumber
Mengosongkan sesi menghapus nilai yang disimpan di sana, tetapi Anda masih dapat menambahkan yang baru di sana. Setelah menghancurkan sesi, Anda tidak dapat menambahkan nilai baru di sana.
sumber
hapus kunci atau nilai hapus dari kumpulan status sesi ..
abaikan-nya menghapus atau menghapus objek sesi dari sesi ..
sumber
akan menghancurkan / mematikan seluruh sesi.
menghapus / membersihkan data sesi (yaitu kunci dan nilai dari sesi saat ini) tetapi sesi akan hidup.
Bandingkan dengan metode Session.Abandon (), Session.Clear () tidak membuat sesi baru, itu hanya membuat semua variabel dalam sesi menjadi NULL.
ID Sesi akan tetap sama dalam kedua kasus tersebut, selama browser tidak ditutup.
Ini menghapus semua kunci dan nilai dari kumpulan status sesi.
Ini menghapus item dari koleksi status sesi.
Ini menghapus item pada indeks tertentu dari kumpulan status sesi.
Properti ini menentukan periode waktu habis yang ditetapkan ke objek Sesi untuk aplikasi. (waktu akan ditentukan dalam menit).
Jika pengguna tidak menyegarkan atau meminta halaman dalam periode waktu habis, sesi akan berakhir.
sumber
Keberadaan sessionid dapat menyebabkan serangan fiksasi sesi yang merupakan salah satu poin kepatuhan PCI. Untuk menghapus sessionid dan mengatasi serangan fiksasi sesi, baca solusi ini - Bagaimana cara menghindari kerentanan Sesi fiksasi di ASP.NET? .
sumber
Saya pikir akan lebih berguna untuk digunakan
Session.Clear()
daripada menggunakanSession.Abandon()
.Karena nilai-nilai masih ada di sesi setelah memanggil nanti tetapi dihapus setelah memanggil sebelumnya.
sumber
Satu hal yang perlu diperhatikan di sini bahwa Session.Clear menghapus item dengan segera tetapi Session.Abandon menandai sesi untuk ditinggalkan pada akhir permintaan saat ini. Artinya, misalkan Anda mencoba mengakses nilai dalam kode tepat setelah perintah session.abandon dijalankan, nilai itu akan tetap ada. Jadi jangan bingung jika kode Anda tidak berfungsi bahkan setelah mengeluarkan perintah session.abandon dan segera melakukan beberapa logika dengan sesi tersebut.
sumber