Kami memiliki aplikasi Drupal yang menggunakan sso untuk mencatat pengguna.
Kami menggunakan AWS classic load balancers (ELB), AWS memberitahu kami bahwa tidak ada persistensi sesi pada ELB.
Apa yang saya coba cari tahu adalah bagaimana cookie bekerja dengan non-persistensi pada load balancers klasik.
DNS example.com diarahkan ke ELB. Ada 2 server di kolam Server1 dan Server2
Yang kami inginkan adalah jika pengguna mengklik beranda mereka di http://example.com/user/12345/
katakan pada server 1 jika mereka belum login mereka diarahkan ke halaman sso http://example.com/user/login/sso
, secara otomatis masuk dan mendapatkan cookie SESS<hexnumber>
dan kemudian diarahkan kembali kehttp://example.com/user/12345/
Kami tidak diizinkan untuk menambahkan server sesi (redis) apa pun jaminan bahwa mereka akan tetap di server 1 untuk kedua pengalihan.
Setahu saya dengan setiap klik ke 'example.com' pengguna bisa berakhir di server 1 atau server 2.
Pertanyaan saya:
Jika mereka mendapatkan cookie di server1 dan kemudian dialihkan ke server2 bagaimana server2 tahu bahwa cookie sudah ditetapkan untuk pengguna itu di server1?
Sepertinya saya berpikir sendiri dalam lingkaran. Ketika mengerjakan jenis pengaturan ini di masa lalu menggunakan LBs tanpa ketekunan sesi, kami menggunakan server redis untuk mengadakan sesi dan setiap permintaan akan melihat redis sever untuk informasi sesi.
sumber
example.com
jika pengguna mendapat cookie kemudian menyimpannya di www1.example.com atau www2.example.com?Jika Anda tidak dapat menggunakan database manajemen sesi seperti Elasticache Redis (Redis untuk sesi yang adil tidak boleh lebih dari $ 15 per bulan), maka opsi terbaik berikutnya adalah mengaktifkan sesi sticky pada ELB;
https://docs.aws.amazon.com/elasticloadbalancing/latest/classic/elb-sticky-sessions.html
Ini akan memaksa pengguna untuk mengambil simpul backend yang sama sepanjang sesi. "Cookie yang dihasilkan penyeimbang muatan" dengan masa pakai 900 detik harus cukup baik tetapi Anda dapat mengubah ini.
sumber