Jelaskan secara rinci mekanisme manajemen sesi di Tomcat:
1. Operasi sesi selama proses permintaan:
Deskripsi Singkat: Selama proses permintaan, pertama -tama purset informasi sesi sesi dalam permintaan, lalu simpan sessionID dalam daftar parameter permintaan. Kemudian ketika Anda mendapatkan sesi dari permintaan, jika ada sesi, maka Anda akan mendapatkan sesi dari kumpulan sesi berdasarkan ID. Jika sessionID tidak ada atau sesi gagal, maka buat sesi baru dan masukkan informasi sesi ke dalam kumpulan sesi untuk penggunaan selanjutnya.
(1) Diagram Waktu Proses Parsing Sesi:
Tinjauan: Pertama, pengguna mengirimkan permintaan HTTP untuk meneruskannya ke HTTP11Processor, dan kemudian meneruskannya ke CoyoteAdapter melalui HTTP11Processor. The Coyoteadapter adalah adaptor yang mengadaptasi org.apache.coyote.request yang dienkapsulasi oleh kerangka kerja coyote dengan org.apache.catalina.connector.rested (saya tidak akan mengatakan banyak tentang proses ini, yang telah diringkas sebelumnya). Setelah konversi, metode parsepathparameter akan dipanggil untuk mengurai informasi cookie dalam parameter jalur (karena ketika cookie dinonaktifkan oleh browser, informasi cookie akan ditulis ulang ke URL). Pertama, cobalah untuk mengurai sesiED dari URL. Maka parsesessionCookiesID akan dipanggil. This is to parse the sessionId from the cookie and store it in the request (parsePathParameters and parseSessionCookiesId methods. During the call process, no obvious XOR logic is seen, that is, both are executed, but isn't there a problem? Think about it, there is actually no problem. If you rewrite the URL to set the sessionId or put it in the cookie, you will only use one of the two methods. Think of this, you will know that there is Tidak masalah). Parse ke sessionID dan memasukkannya ke dalam permintaan. Tidak apa -apa untuk mengurai logika sessionID.
Kode kunci berikut diposting:
Metode parsepatharameter (diuraikan dari URL penulisan ulang):
PS: Bagian yang ditandai adalah variabel penguraian dari URL dan kemudian menempatkannya di daftar parameter permintaan.
Metode ParsesessionCookiesID (parsing sessionID dari cookie):
PS: Tag di atas adalah untuk mendapatkan sessionID dari cookie. Lihatlah tag pertama dengan panggilan ke sessionconfig.getSessionCookIename (konteks), di sini Anda akan mendapatkan kunci dari sesi default. Kunci ini didefinisikan dalam SesionConfig, dan nilainya adalah JSessionID:
(2) Proses memperoleh sesi dari permintaan pada dasarnya seperti yang dijelaskan di atas. Kemudian lihatlah proses mendapatkan sesi di Servlet:
Ikhtisar: AppServer adalah servlet yang kami definisikan sendiri. Ketika kita mendapatkan sesi melalui Reqest, httpservletRequest (antarmuka) yang dipanggil sebenarnya adalah permintaan Facade (fasad yang merangkum org.apache.catalina.connector.request), dan kemudian RequestFacade akan memanggil metode getsession dari permintaan nyata. Logika permintaan spesifik adalah untuk memanggil metode getManger dari kontainer konteks untuk mendapatkan manajer sesi (rincian manajer sesi dijelaskan di bawah). Jika sessionID telah diuraikan, maka metode temuan akan dipanggil untuk mendapatkan sesi yang sesuai dari kumpulan objek sesi. Jika tidak, jika sessionID tidak ada, sesi perlu diciptakan kembali dan ditempatkan di kumpulan objek sesi.
Kode kunci berikut diposting:
Metode getsesi dari class request facade:
Metode Gotession permintaan kelas:
Metode DoGetSession dari Permintaan Kelas:
PS: Tag pertama adalah mendapatkan informasi sesi dari kumpulan objek sesi berdasarkan sessionID, dan tag kedua adalah membuat objek sesi baru tanpa mengurai sessionID.
Ini menciptakan sesi baru. Poin ini melibatkan generasi sessionID baru. Kode kunci logis untuk menghasilkan sessionID didefinisikan dalam metode generatessiessionId dalam generator sesi kelas:
Di atas adalah proses servlet memperoleh sesi. Rincian berikut merangkum bagaimana Tomcat mengelola sesi, yaitu, pengetahuan tentang manajer sesi.
2. Mekanisme manajemen sesi
Definisi Sesi Manajer: Komponen manajer sesi bertanggung jawab untuk mengelola objek sesi, seperti membuat dan menghancurkan objek sesi.
Pertama, mari kita lihat diagram struktur warisan kelas dari Sesi Manajer (ini adalah grafik Tocmat7.x, dan mekanisme warisan kelas Tomcat5 sangat berbeda dari ini):
Deskripsi Singkat: Berikut ini merangkum setiap kategori secara bergantian (lihat informasi situs web resmi):
(1) Manajer: Menentukan antarmuka dasar yang terkait dengan wadah tertentu untuk mengelola kumpulan sesi.
(2) ManajerBase: mengimplementasikan antarmuka manajer, yang menyediakan implementasi fungsi umum dari manajer sesi.
(3) StandardManager: Warisan dari ManagerBase, manajer sesi default (tidak menentukan konfigurasi, gunakan ini secara default). Ini adalah implementasi non-cluster dari sesi pemrosesan Tomcat (yaitu, versi yang berdiri sendiri). Ketika Tomcat ditutup, informasi sesi memori akan tetap ada pada disk dan disimpan sebagai session.ser, dan akan dipulihkan saat booting lagi.
(4) PersistentManagebase: Diwarisi dari ManagerBase, mengimplementasikan dan mendefinisikan fungsi dasar kegigihan manajer sesi.
(5) PersistentManager: Diwarisi dari PersistentManagebase. Fungsi utama adalah bertukar objek sesi idle (dengan mengatur waktu batas waktu) pada disk.
(6) ClusterManager: Ini mengimplementasikan antarmuka manajer, dan Anda harus ditebak dengan nama kelas. Ini adalah manajer yang mengelola sesi cluster dan manajer sesi versi StandardManager yang berdiri sendiri di atas adalah konsep relatif. Kelas ini mendefinisikan antarmuka replikasi dan berbagi sesi antar kelas.
(7) ClusterManagebase: mengimplementasikan antarmuka clusterManager dan mewarisi dari ManagerBase. Kelas ini mengimplementasikan operasi dasar replikasi sesi.
(8) BackupManager: Diwarisi dari ClusterManagebase, implementasi strategi replikasi sesi antar-kluster. Hanya ada satu node cadangan dalam data sesi, dan semua node di cluster terlihat di lokasi node cadangan ini. Desain ini memberikan keuntungan dalam mendukung penyebaran heterogen.
(9) Deltamanager: Diwarisi dari ClusterManagebase, implementasi strategi replikasi sesi cluster. Tidak seperti BackupManager, data sesi akan disalin ke semua node anggota di cluster, yang mensyaratkan bahwa semua node dalam cluster harus isomorfik dan aplikasi yang sama harus digunakan.
Suplemen: Mari kita ringkas secara rinci di bawah ini. Ada toko variabel anggota di kelas PersistentManagebase:
Strategi penyimpanan manajer sesi persisten ditentukan oleh objek toko ini. Struktur warisan kelas toko ini adalah sebagai berikut:
Deskripsi Singkat: Toko antarmuka dan contoh -contohnya menyediakan serangkaian strategi penyimpanan untuk manajer sesi. Toko mendefinisikan antarmuka dasar, dan Storebase menyediakan implementasi dasar. Kebijakan yang diterapkan oleh kelas Filestore adalah untuk menyimpan sesi dalam file yang ditentukan dalam direktori dengan setDirectory () dan diakhiri dengan .Session. Kelas JDBCStore menyimpan sesi ke dalam database melalui JDBC. Oleh karena itu, perlu menggunakan JDBCStore. Anda perlu memanggil metode setDriverName () dan metode setConnectionUrl () masing -masing untuk mengatur nama driver dan URL koneksi.
3. Konfigurasi Terkait Sesi Tomcat
Rangkum konfigurasi dan pengaturan yang terkait dengan sesi dari dua level. Pertama -tama, dari level file konfigurasi, sesi memiliki waktu kedaluwarsa, dan waktu kedaluwarsa default didefinisikan dalam $ catalina_home/conf/web.xml. Konfigurasi default spesifik adalah sebagai berikut (waktu kedaluwarsa default adalah 30 menit, yaitu, tidak ada akses dalam 30 menit, dan sesi berakhir):
Poin lain adalah bahwa jika manajemen sesi tidak dikonfigurasi, StandardManager digunakan secara default. Namun, jika Anda ingin mengonfigurasinya, Anda dapat menentukannya dalam $ Catalina_Home/conf/context.xml (dari konfigurasi ini, Anda dapat melihat bahwa manajer sesi dikaitkan dengan kontainer konteks, yang berarti bahwa setiap aplikasi web akan memiliki manajer sesi). Konfigurasi spesifiknya adalah sebagai berikut:
Tomcat7.x default ke konfigurasi manajer ini. Jika PersistentManager yang ingin Anda tentukan adalah manajer default, Anda dapat menentukannya seperti ini:
Bahkan, setelah melihat ini, saya menemukan bahwa manajer sesi atau kebijakan penyimpanan toko dapat disesuaikan selama antarmuka yang relevan diimplementasikan. Tidak apa -apa untuk menulis konfigurasi sendiri di sini.
Selain itu, mari kita ringkas dari level kode: beberapa informasi konfigurasi sesi ditulis dalam kode, misalnya, kelas SesionConfig mendefinisikan beberapa informasi pengaturan sesi. Nama sesi di cookie adalah JSession. Ketika sesi ditempatkan di jalur melalui penulisan ulang URL, nama nilai kunci adalah JSessionIds. Kode spesifiknya adalah sebagai berikut:
Poin lain adalah bahwa panjang default yang ditentukan dari sessionID adalah 16 byte, yang ditentukan dalam sessionidgenerator:
Ok, begitu banyak dirangkum tentang konfigurasi default.
Di atas adalah semua konten artikel ini. Saya berharap ini akan membantu untuk pembelajaran semua orang dan saya harap semua orang akan lebih mendukung wulin.com.