Cookie dan sesi keduanya dimaksudkan untuk mempertahankan status akses pengguna. Di satu sisi, ini adalah untuk memfasilitasi implementasi bisnis, dan di sisi lain, itu adalah menyederhanakan pemrograman server dan meningkatkan kinerja akses. Cookie adalah teknologi klien (yaitu, browser). Setelah mengatur cookie, setiap kali Anda mengunjungi server, cookie akan dibawa dalam permintaan; Sesi adalah teknologi server, yang menyimpan informasi akses pengguna di server.
Gunakan cookie untuk memberikan informasi. Dengan meningkatnya jumlah cookie dan jumlah kunjungan meningkat, bandwidth yang dikonsumsi akan menjadi lebih besar dan lebih besar; Saat menggunakan sesi untuk menyimpan informasi, kelemahan terbesar adalah tidak mudah untuk dibagikan antara beberapa server.
1 cookie
Dalam istilah Layman, ketika pengguna mengakses server menggunakan HTTP, server akan mengembalikan beberapa informasi pasangan kunci ke browser klien dan menambahkan beberapa batasan pada data ini. Ketika pengguna memenuhi batasan, lain kali pengguna mengakses server, ia akan membawa informasi pasangan nilai kunci yang ditetapkan sebelumnya. Saat pengguna memasuki URL, browser mencari cookie yang terkait dengan URL pada hard drive lokal. Jika cookie ada, browser mengirimkan cookie ke situs Anda bersama dengan permintaan halaman.
Cookie dikaitkan dengan situs web, bukan dengan halaman tertentu. Oleh karena itu, terlepas dari halaman mana di situs browser dan server akan bertukar informasi cookie. Ketika pengguna mengunjungi situs yang berbeda, setiap situs dapat mengirim cookie ke browser pengguna; Browser akan menyimpan semua cookie secara terpisah.
Item atribut cookie
Saat ini ada 2 versi cookie, versi 0 dan versi 1. Mereka memiliki 2 jenis pengidentifikasi header respons, yaitu "Set-Cookie" dan "Set-Cookie2".
Nilai Atribut Cookie 0
Nilai Atribut Cookie 1
Contoh menggunakan cookie di java
@Overridepublic void doGet (permintaan httpservletrequest, httpservletResponse response) melempar ioException {response.setContentType ("Teks/html; charset = UTF-8"); printwriter out = response.getWriter (); cookie [] cookies. (name == null) {response.addcookie (cookie baru ("name", "luoxn28"));} else {System.out.println (name);} out.println ("hello world");} public static string getCoodie (cookie [] cookies, cookies, string Key) {ifies {ifies! (cookie.getName (). Equals (key)) {return cookie.getValue ();}}} return null;}Beberapa tindakan pencegahan untuk menggunakan cookie (mengambil penggunaan java sebagai contoh)
• Nama dan nilai cookie yang dibuat tidak dapat berupa karakter non-dasar. Jika ini adalah orang Cina, itu dapat dikodekan melalui rrlencoder, jika tidak, Java.lang.illegalargumentException akan dilemparkan.
• Ketika beberapa nama dan nilai nilai muncul, mereka sebenarnya berada di header "cookie" yang sama.
• Nilai cookie dapat menyimpan tanda baca selain dari ";". Tetapi karakter Cina tidak dapat disimpan. Sampah akan muncul saat menyimpan karakter Cina.
Beberapa pembatasan cookie
Cookie adalah lapangan di header HTTP. HTTP sendiri tidak memiliki batasan pada bidang ini, tetapi cookie akhirnya disimpan di browser. Browser yang berbeda memiliki beberapa batasan pada penyimpanan cookie, seperti yang ditunjukkan pada tabel berikut:
Jika Anda mencoba menyimpan lebih banyak cookie, cookie tertua akan dibuang.
2 sesi
Sesi memecahkan masalah bahwa ketika jumlah cookie meningkat, jumlah transmisi data antara klien dan server meningkat. Ketika klien yang sama berinteraksi dengan server, ia tidak perlu melewati semua nilai cookie setiap saat, tetapi hanya nilai ID yang dilewatkan. ID ini dihasilkan ketika klien mengakses server untuk pertama kalinya, dan setiap klien unik. ID ini biasanya merupakan kue yang namanya jsessionid.
Bagaimana cara kerja sesi berdasarkan cookie? Ini dapat didasarkan pada parameter jalur URL; Ini juga bisa didasarkan pada cookie. Jika logo cookie dalam wadah konteks tidak dimodifikasi, itu juga didukung secara default. Ketika browser tidak mendukung fungsi cookie, browser akan menulis ulang sessioncookeename pengguna ke parameter URL yang diminta oleh pengguna. Metode pengirimannya seperti /path /servlet; name = xxx; name2 = xxx2? Name3 = xxx3. SessionCookeename Jika item konfigurasi sesi-konfigasi dikonfigurasi di web.xml, atribut nama di bawah cookie-config adalah nilai sessioncookeename ini. Jika item konfigurasi sesi-konfigasi tidak dikonfigurasi, sessioncookienameJiushi "jSessionId". Perhatikan bahwa cookie yang terkait dengan sesi tidak berbeda dengan cookie lainnya. Jika klien juga mendukung cookie, Tomcat masih akan menguraikan ID sesi dalam cookie dan menimpa ID sesi di URL.
Bagaimana sesi bekerja
Dengan ID sesi, server dapat membuat objek HTTPSESSION. Pertama kali Anda memanggil metode request.getSession (). Jika tidak ada objek httpsession yang sesuai, objek baru akan dibuat dan ditambahkan ke wadah sesi org.apache.catalina.manager akan disimpan. Kelola Menyimpan Semua Siklus Hidup Sesi, sesi berakhir dan didaur ulang, server ditutup, dan sesi diserialisasi ke disk. Perhatikan bahwa klien sesuai dengan objek sesi, yang menghemat nilai sesi yang kami buat.
Standar yang dipanggil oleh metode request.getSession () akan selalu ada, bahkan jika sesi yang terkait dengan klien ini telah kedaluwarsa. Jika kedaluwarsa, yang baru akan dibuat, tetapi nilai sesi yang ditetapkan sebelumnya akan hilang.
3 Perbandingan Cookie dan Keamanan Sesi
Cookie meneruskan data yang disimpan dari klien ke server melalui header HTTP, dan kemudian dari server ke klien. Semua data disimpan di browser klien. Data ini dapat diakses, dan cookie bahkan dapat ditambahkan dan dimodifikasi melalui plug-in. Keamanan semua cookie relatif buruk. Sebagai perbandingan, sesi menyimpan data di sisi server, yang jauh lebih aman. Hanya membutuhkan cookie untuk melewati ID cookie kembali, jadi sesi lebih cocok untuk menyimpan privasi pengguna dan data penting.
Kerangka Sesi Terdistribusi
Dalam aplikasi Internet yang besar, menggunakan cookie dan sesi saja tidak layak, karena menggunakan cookie dapat menyelesaikan masalah penyebaran yang didistribusikan dengan baik. Sistem aplikasi Internet yang besar memiliki ratusan mesin, dan banyak sistem aplikasi yang berbeda bekerja bersama. Karena cookie menyimpan data di browser pengguna, setiap kali pengguna mengunjungi, data akan dibawa kembali ke server, yang memecahkan masalah inkonsistensi cookie yang disebabkan oleh permintaan pengguna yang sama diproses pada server yang berbeda.
Karena aplikasi adalah cluster, sesi tidak dapat disimpan dalam memori setiap server. Jika setiap server memiliki ratusan ribu pengguna akses, memori server tidak dapat ditampung. Bahkan jika dapat ditampung, itu tidak dapat menjamin bahwa sesi tersebut akan disinkronkan ke server lain. Oleh karena itu, berbagi sesi ini membutuhkan menyimpannya dalam cache terdistribusi khusus, yang dapat dibaca dan ditulis kapan saja. Kinerja harus cukup baik untuk memenuhi persyaratan, seperti memcache/redis atau kerangka kerja terdistribusi sumber terbuka Taobao.
Pertanyaan pengiriman formulir berulang
Ada banyak tempat di situs web yang telah mengulangi pengiriman. Untuk mencegah pengiriman formulir yang berulang, perlu untuk mengidentifikasi setiap permintaan akses pengguna, sehingga setiap permintaan akses unik untuk server. Untuk mengidentifikasi setiap permintaan pengguna, item formulir tersembunyi dapat ditambahkan ke bidang formulir yang diminta oleh pengguna, dan nilainya merupakan token yang unik, seperti:
<Form ID = "Form" Method = "Post"> ... <Input Type = Hidden Name = "Token" Value = "XXX"/> </form>
Token unik dihasilkan ketika pengguna meminta formulir dan mengaturnya ke sesi pengguna. Ketika pengguna mengirimkan, ia memeriksa apakah token konsisten dengan token yang disimpan dalam sesi. Jika konsisten, itu berarti tidak ada pengajuan berulang. Pada saat yang sama, token dalam sesi diperbarui ke nilai token baru; Jika tidak, token yang dikirimkan oleh pengguna tidak lagi menjadi token hukum dari permintaan saat ini, dan pengajuan gagal.
Di atas adalah hal -hal tentang cookie dan sesi di Java yang diperkenalkan oleh editor kepada Anda. Saya harap ini akan membantu Anda. Jika Anda memiliki pertanyaan, silakan tinggalkan saya pesan dan editor akan membalas Anda tepat waktu. Terima kasih banyak atas dukungan Anda ke situs web Wulin.com!