Cookie JSESSIONID dibuat / dikirim ketika sesi dibuat. Sesi dibuat ketika kode Anda memanggil request.getSession()
atau request.getSession(true)
untuk pertama kalinya. Jika Anda hanya ingin mendapatkan sesi, tetapi tidak membuatnya jika tidak ada, gunakan request.getSession(false)
- ini akan mengembalikan Anda satu sesi atau null
. Dalam hal ini, sesi baru tidak dibuat, dan cookie JSESSIONID tidak dikirim. (Ini juga berarti bahwa sesi tidak harus dibuat atas permintaan pertama ... Anda dan kode Anda memegang kendali saat sesi dibuat)
Sesi adalah per konteks:
SRV.7.3 Lingkup Sesi
Objek HttpSession harus dicakup pada level aplikasi (atau konteks servlet). Mekanisme yang mendasarinya, seperti cookie yang digunakan untuk membangun sesi, bisa sama untuk konteks yang berbeda, tetapi objek yang dirujuk, termasuk atribut dalam objek itu, tidak boleh dibagi di antara konteks oleh wadah.
( Spesifikasi Servlet 2.4 )
Pembaruan: Setiap panggilan ke halaman JSP secara implisit membuat sesi baru jika belum ada sesi. Ini dapat dimatikan dengan session='false'
arahan halaman, di mana variabel sesi kasus tidak tersedia di halaman JSP sama sekali.
request.getSession()
ataurequest.getSession(true)
, maka Anda mendapatkan sesi yang ada atau baru. Namun jika kode Anda panggilanrequest.getSession(false)
, maka Anda mendapatkan sesi yang ada atau nol, jika tidak ada sesi.Berikut ini beberapa informasi tentang satu lagi sumber
JSESSIONID
cookie:Saya hanya men-debug beberapa kode Java yang berjalan pada server kucing jantan. Saya tidak menelepon
request.getSession()
secara eksplisit di mana pun dalam kode saya, tetapi saya perhatikan bahwaJSESSIONID
cookie masih diatur.Saya akhirnya melihat kode Java yang dihasilkan sesuai dengan JSP di direktori kerja di bawah Tomcat.
Tampaknya, suka atau tidak, jika Anda memohon JSP dari servlet,
JSESSIONID
akan dibuat!Ditambahkan: Saya baru saja menemukan bahwa dengan menambahkan arahan JSP berikut:
Anda dapat menonaktifkan pengaturan
JSESSIONID
oleh JSP.sumber
KOREKSI: Silakan pilih jawaban Peter Štibraný - lebih tepat dan lengkap!
"JSESSIONID" adalah id unik dari sesi http - lihat javadoc di sini . Di sana, Anda akan menemukan kalimat berikut
Jadi, ketika Anda pertama kali menekan situs, sesi baru dibuat dan terikat ke SevletContext. Jika Anda menggunakan beberapa aplikasi, sesi tidak dibagikan.
Anda juga dapat membatalkan sesi saat ini dan karenanya membuat yang baru. misalnya ketika beralih dari http ke https (setelah login), itu adalah ide yang sangat bagus, untuk membuat sesi baru.
Semoga ini menjawab pertanyaan Anda.
sumber
Waspadalah jika halaman Anda termasuk .jsp atau .jspf (fragmen) lainnya! Jika Anda tidak mengatur
pada mereka juga, halaman induk akan berakhir dengan memulai sesi baru dan mengatur cookie JSESSIONID.
Untuk halaman .jspf pada khususnya, ini terjadi jika Anda mengkonfigurasi web.xml Anda dengan cuplikan seperti itu:
untuk mengaktifkan skrip di dalamnya.
sumber
Untuk tautan yang dibuat di JSP dengan tag khusus, saya harus menggunakannya
di JSP
DAN
dalam aksi Struts
sumber