Saya tahu ini memiliki peluang besar untuk ditandai sebagai duplikat, tetapi tidak dapat menemukan apa yang saya cari
Ini adalah masalah umum dan saya yakin itu memiliki beberapa solusi praktik terbaik yang terdefinisi dengan baik
Latar Belakang
Aplikasi SaaS satu halaman, memiliki banyak drag and drop, pengguna dapat berinteraksi dengannya tanpa banyak komunikasi server untuk jangka waktu tertentu
Sesi server hanya menampung objek pengguna, menggunakan cookie sesi yang tidak persisten
Sesi berakhir pada server setelah X jam
Beberapa hal hanya dimuat saat masuk
Masalah
- Pengguna bekerja di aplikasi, saat selesai, pengguna tidak logout, biarkan browser tetap terbuka
- Pengguna kembali setelah lebih dari X jam (sesi tidak valid di server)
- Pengguna berinteraksi dengan aplikasi tanpa memerlukan koneksi server (menyeret dan menjatuhkan hal-hal, pengeditan teks ...)
- Hanya pada interaksi server berikutnya (misalkan tidak ada penyimpanan otomatis) pengguna dilemparkan ke halaman login dan kehilangan sebagian dari pekerjaan mereka
Solusi yang memungkinkan
Berikut adalah beberapa solusi yang ada dalam pikiran saya, ingin mendengar jika ada yang lain, dan jika ada yang salah secara fundamental dengan salah satu dari mereka.
1. Jangan pernah logout pengguna
- Bagaimana? baik menyimpan sesi yang panjang, menyimpan cookie tetap, atau ping javaScript "tetap hidup"
- Pro : pengguna tidak perlu khawatir tentang apa pun, memperbaiki masalah bagi mereka
- Cons : tidak sesuai PCI, tidak aman, dan perlu perubahan pengembangan, misalnya hal-hal yang dimuat ke sesi hanya pada login pengguna harus pindah ke salah satu sub model pub (mendengarkan perubahan acara) atau memiliki batas waktu cache.
2. Penyimpanan Lokal
- Bagaimana? gunakan penyimpanan lokal baru untuk menyimpan sementara kondisi jika keluar, redirect ke halaman login, tetap ada sekali login
- Pro : Juga menjadi dasar untuk dukungan "bekerja offline", tidak hanya menangani batas waktu sesi
- Kontra : lebih sulit untuk diterapkan, perlu melakukan penggabungan status pohon data, tidak semua browser mendukung
3. Simpan otomatis
Setiap tindakan pengguna yang mengubah model, harus bertahan segera (atau melalui semacam antrian sisi klien), misalnya jika mereka mencentang kotak centang, mengubah bidang teks, atau menarik dan melepaskan sesuatu, setelah selesai, tahan perubahan tersebut.
- Bagaimana? Gunakan kerangka kerja MV ** (Backbone.js / Knockout.js / Ember.js / Angular.js dll) untuk mengikat model, dan bertahan pada perubahan.
- Kelebihan : Sepertinya solusi bersih, sesi aktif selama pengguna aktif, tidak ada pekerjaan sisi klien yang dilakukan tanpa bertahan.
- Cons : Pengguna tindakan terakhir lakukan setelah batas waktu sesi hilang.
4. Logout pengguna setelah sesi berakhir
ini dapat memiliki beberapa pendekatan
Tanyakan pada server "apakah sesi sudah kadaluwarsa" - ini adalah masalah kecil 22 / kucing Schrodinger, karena hanya pertanyaan ke server yang memperpanjang sesi (memulai ulang waktu habis),
- Bagaimana? Entah memiliki server yang mendukung pertanyaan seperti itu (saya tidak tahu, tapi saya datang dari tanah Jawa) atau, orang hanya dapat menyimpan tabel ID sesi, dan waktu akses terakhir secara manual, dan meminta server dengan melewati sesi ID sebagai parameter alih-alih cookie, saya tidak yakin apakah ini bahkan mungkin, tapi kedengarannya berbahaya, tidak aman, dan desain yang buruk sama sekali. Halaman login, tetap ada setelah login
- Pro : Jika ada dukungan asli seperti itu di server, terdengar seperti pertanyaan yang bersih dan sah (menanyakan apakah pengguna X masih memiliki sesi atau tidak tanpa memperbaruinya jika mereka melakukannya)
- Cons : Jika server tidak mendukungnya (dan lagi, saya tidak tahu apakah ada server atau kerangka kerja yang memiliki fungsi ini) maka solusinya memiliki risiko keamanan yang sangat besar.
Satu solusi yang saya dengar adalah memiliki sesi pendek di sisi server, dan ping sisi klien yang tetap hidup, yang memiliki jumlah ping maksimum
- Bagaimana? Sesi singkat di server, klien ping setiap sessionTimeOut / 2, memiliki coba ulang maksimum Y.
- Pro : Jenis perbaikan masalah, cepat dan kotor
- Cons : Terasa seperti peretasan, menangani pembaharuan sesi sendiri alih-alih membiarkan server melakukannya
Penghitung waktu sisi klien
Bagaimana? Memiliki penghitung waktu di sisi klien dan menyinkronkannya dengan server satu dengan memulai kembali pada setiap permintaan agar sama dengan batas waktu sesi server maks dikurangi beberapa lapisan, setelah pengguna tidak mengirim permintaan apa pun ke server, UI menunjukkan "sesi adalah akan kehabisan waktu, apakah Anda ingin melanjutkan? " (seperti yang Anda miliki di perbankan online)
Pro : Memperbaiki masalah
- Kekurangan : Tidak dapat memikirkan apa pun kecuali kebutuhan untuk memastikan sinkronisasi berfungsi
Pertanyaan
Saya mungkin kehilangan sesuatu dalam analisis di atas, mungkin memiliki beberapa kesalahan konyol, dan saya ingin bantuan Anda untuk memperbaikinya. Solusi apa lagi yang bisa saya miliki untuk ini?
now
. 4.2 terdengar seperti cara yang bagus untuk membunuh server Anda dan meningkatkan biaya 4.3 Di Android, ketika kembali ke layar beranda saya cukup yakin prosesnya dijeda dan itu mungkin juga mengganggu timer klien Anda.