Dasar yang membenarkan satu sesi bagi setiap akaun kelihatan selesai sehingga log masuk kedua tiba. Dua hasil mungkin: pendatang baru menggantikan sesi yang sedang berjalan, atau sesi yang berjalan mengekalkan slot dan pendatang baru ditolak. Hanya yang kedua ialah dasar sesi pertama menang. Pilihan klien yang paling ramai orang guna membolehkan keserentakan dan oleh itu tidak menghasilkan hasil tersebut.

Dua kontrak tersembunyi di sebalik satu tetapan

Apabila keserentakan dimatikan, sambungan kedua yang membawa nama sijil yang sama boleh menyingkirkan sesi yang sudah berjalan. Menghidupkan keserentakan membenarkan beberapa sesi sekali gus, iaitu berlawanan dengan had. Kedua-dua keadaan bukan dasar penolakan, jadi keputusan mesti dibuat di tempat lain sepenuhnya.

Tuliskan kontrak itu sebelum melaksanakan apa-apa: siapa yang ditolak, bukti apa yang mengenal pasti sesi yang berjalan, dan apa yang berlaku apabila sesi mati tanpa pemutusan bersih. Dasar yang tidak pernah dinyatakan dengan cara itu tidak boleh diuji kemudian.

Pengusiran berlaku sebelum cangkuk sambungan anda

Pada laluan kod pelayan 2.6, penyediaan awal untuk klien baharu mengalihkan keluar instans sedia ada dengan nama yang sama apabila keserentakan dimatikan. Pengalihan keluar itu berlaku sebelum rantai pengendali sambungan berjalan. Skrip yang menyedari pertindihan dan memulangkan kegagalan oleh itu menolak pendatang baru selepas sesi yang berjalan sudah dibuang - tepat hasil yang dasar itu mahu halang. Urutan panggilan balik dalam pelaksanaan upstream ialah satu-satunya jawapan yang boleh dipercayai untuk binaan anda.

StageWho can still refuseEffect on the incumbent
Certificate checkServer trust configurationNone
Authentication decisionThe authentication controllerNone, because establishment has not run
Connect handlerA profile scriptAlready evicted in the same-name case
Post-establishmentStatus tooling, monitoringBoth sessions already exist or one is gone

Mengundi fail status juga bukan pintu. Dua percubaan yang tiba serentak boleh kedua-duanya melihat slot kosong sebelum mana-mana pun mengesahkannya, dan kedua-duanya meneruskan.

Pindahkan keputusan ke pengesahan

Antara muka pengurusan boleh mengambil alih keputusan pengesahan selepas pengesahan sijil. Dalam susunan itu pengawal bukan pemantau: ia menerima setiap instans klien yang bersambung dan menjawab sama ada instans itu boleh meneruskan. Kerana jawapan tiba sebelum pembentukan, penolakan membiarkan sesi yang berjalan tidak terganggu. Saluran yang sama melaporkan pemutusan, dan begitulah pengawal tahu bahawa slot telah dilepaskan secara sah.

Setiap instans baharu mesti melalui pintu itu, termasuk penyambungan semula dan mana-mana laluan yang mengesahkan semula tanpa gesaan. Pintu yang tidak pernah dicapai oleh sesetengah instans tidak melindungi apa-apa, dan ketinggalan itu kekal tidak kelihatan sehingga seseorang mencuba jalan pintas.

Token boleh berjalan melepasi pintu

Sebaik sahaja token dikeluarkan, pelayan boleh mengesahkannya secara dalaman dan melangkau pengesahan luaran untuk sambungan itu. Panggilan pengurusan tidak pernah berlaku, jadi pemeriksaan slot yang dilaksanakan hanya di situ tidak pernah melihat instans baharu. Tingkah laku itu keselesaan untuk pengguna dan lubang untuk dasar keserentakan. Buat sambungan yang disahkan token melalui pemeriksaan berwibawa yang setara, atau matikan laluan token apabila dasar menuntut keputusan pada setiap sambungan.

Jangan tebus itu dengan menerima setiap token tanpa syarat. Token yang tamat tempoh atau tidak sah masih mesti gagal, dan ia mesti gagal melalui titik keputusan yang sama seperti segala-galanya.

Ikat tempahan pada instans, bukan pada alamat

Alamat ialah identiti yang lemah: penyambungan semula dari komputer riba yang sama boleh datang dari alamat lain, dan kelayakan yang disalin boleh datang dari alamat yang sama. Ikat tempahan pada instans klien yang diberikan pelayan, supaya pengesahan semula instans yang sudah diterima dikenali sebagai pemilik. Pengecam instans baharu mesti memperoleh slotnya sendiri melalui keputusan yang pertama menang walaupun ia mengemukakan token yang sama.

Lepaskan hanya tempahan milik percubaan yang gagal. Peristiwa pemutusan tertunda daripada percubaan lama tidak boleh menghapuskan slot pemilik yang lebih baharu, itulah sebabnya pelepasan menamakan instans dan bukan akaun. Selepas pengawal dimulakan semula, selaraskan sesi yang hidup sebelum menerima sesiapa, dan gunakan peraturan yang sama pada setiap gerbang yang melayani akaun itu.

Putuskan secara berasingan bagaimana slot yang benar-benar lapuk dipulihkan. Pentadbir memerlukan cara berdokumen untuk membersihkannya, dan laluan itu tidak sepatutnya boleh dicapai oleh pengguna yang hanya mengklik sambung semula.

Uji pasangan yang penting: dua log masuk hampir serentak, penyambungan semula selepas pemutusan bersih, pengesahan semula sesi yang berjalan, pendatang baru yang ditolak, dan pengawal yang dimulakan semula. Dalam setiap kes sesi yang berjalan mesti kekal boleh digunakan dan pendatang baru mesti ditolak tanpa kerosakan pada akaun lain.

Artikel berkaitan