Tôi biết điều này có cơ hội lớn được đánh dấu là trùng lặp, nhưng không thể tìm thấy chính xác những gì tôi đang tìm kiếm
Đây là một vấn đề phổ biến và tôi chắc chắn rằng nó có một số giải pháp thực hành tốt nhất được xác định rõ
Lý lịch
Một ứng dụng SaaS một trang, có nhiều thao tác kéo và thả, người dùng có thể tương tác với nó mà không cần giao tiếp nhiều máy chủ trong khoảng thời gian
Phiên máy chủ chỉ giữ đối tượng người dùng, sử dụng cookie phiên không liên tục
Phiên hết hạn trên máy chủ sau X giờ
Một số thứ chỉ được tải trong khi đăng nhập
Vấn đề
- Người dùng hoạt động trên ứng dụng, khi hoàn tất, người dùng không đăng xuất, chỉ cần mở trình duyệt
- Người dùng quay lại sau hơn X giờ (phiên không hợp lệ trên máy chủ)
- Người dùng tương tác với ứng dụng mà không cần kết nối máy chủ (kéo và thả đồ, chỉnh sửa văn bản ...)
- Chỉ trên tương tác máy chủ tiếp theo (giả sử không có lưu tự động), người dùng sẽ bị ném vào trang đăng nhập và mất một số công việc của họ
Phương pháp khả thi
Dưới đây là một số giải pháp tôi có trong đầu, muốn nghe nếu có bất kỳ giải pháp nào khác, và nếu có bất kỳ điều gì sai về cơ bản với bất kỳ trong số họ.
1. Không bao giờ đăng xuất người dùng
- Làm sao? hoặc giữ một phiên dài, giữ một cookie liên tục hoặc javaScript "giữ mạng"
- Ưu điểm : người dùng không cần phải lo lắng về bất cứ điều gì, khắc phục sự cố cho họ
- Nhược điểm : không tuân thủ PCI, không bảo mật và cần thay đổi phát triển, ví dụ: những thứ được tải đến phiên chỉ khi đăng nhập người dùng cần chuyển sang mô hình phụ pub (nghe thay đổi sự kiện) hoặc hết thời gian chờ bộ đệm.
2. Lưu trữ cục bộ
- Làm sao? sử dụng bộ nhớ cục bộ mới để tạm thời lưu trữ trạng thái nếu đăng xuất, chuyển hướng đến trang đăng nhập, tiếp tục đăng nhập
- Ưu điểm : Cũng dựa trên cơ sở hỗ trợ "làm việc ngoại tuyến", không chỉ xử lý thời gian chờ phiên
- Nhược điểm : khó thực hiện hơn, cần thực hiện hợp nhất trạng thái cây dữ liệu, không phải tất cả các trình duyệt đều hỗ trợ
3. Tự động lưu
Mọi hành động của người dùng thay đổi mô hình, sẽ tồn tại ngay lập tức (hoặc thông qua một số loại hàng đợi phía máy khách), ví dụ: nếu họ kiểm tra hộp kiểm, thay đổi trường văn bản hoặc kéo và thả một cái gì đó, sau khi hoàn thành, vẫn tiếp tục thay đổi.
- Làm sao? Sử dụng khung MV ** (Backbone.js / Knockout.js / Ember.js / Angular.js, v.v.) để liên kết mô hình và kiên trì thay đổi.
- Ưu điểm : Có vẻ như là một giải pháp sạch, phiên hoạt động miễn là người dùng hoạt động, không có công việc phía khách hàng nào được thực hiện mà không cần duy trì.
- Nhược điểm : Người dùng hành động cuối cùng đang thực hiện sau khi hết thời gian phiên.
4. Đăng xuất người dùng sau khi hết hạn phiên
điều này có thể có một số cách tiếp cận
Hỏi máy chủ "đã hết phiên" - đây là một chút của con mèo 22 / Schrodinger, vì câu hỏi đơn thuần cho máy chủ mở rộng phiên (khởi động lại thời gian chờ),
- Làm sao? Hoặc có một máy chủ hỗ trợ câu hỏi như vậy (tôi không biết, nhưng tôi đến từ vùng đất Java) hoặc, người ta chỉ có thể giữ một bảng ID phiên và thời gian truy cập lần cuối theo cách thủ công và hỏi máy chủ bằng cách vượt qua phiên ID là một tham số thay vì cookie, tôi không chắc liệu điều này có khả thi hay không, nhưng nó có vẻ nguy hiểm, không an toàn và thiết kế xấu trang whatsoever.login, vẫn tồn tại sau khi đăng nhập
- Ưu điểm : Nếu có hỗ trợ riêng như vậy trong các máy chủ, nghe có vẻ là một câu hỏi rõ ràng, hợp pháp (hỏi xem người dùng X có còn phiên hay không mà không gia hạn nếu họ làm như vậy)
- Nhược điểm : Nếu máy chủ không hỗ trợ nó (và một lần nữa, tôi không biết liệu có máy chủ hoặc khung nào có chức năng này không) thì cách giải quyết có nguy cơ bảo mật rất lớn.
Một cách giải quyết mà tôi đã nghe là có một phiên ngắn ở phía máy chủ và ping máy khách vẫn còn sống, có số lần ping tối đa
- Làm sao? Phiên ngắn trên máy chủ, máy khách ping mỗi sessionTimeOut / 2, có số lần thử lại tối đa là Y.
- Ưu điểm : Loại sửa lỗi, nhanh và bẩn
- Nhược điểm : Cảm thấy giống như hack, tự xử lý việc gia hạn phiên thay vì để máy chủ thực hiện
Hẹn giờ phía khách hàng
Làm sao? Có một bộ đếm thời gian ở phía máy khách và đồng bộ hóa nó với máy chủ bằng cách khởi động lại nó trên mỗi yêu cầu bằng với thời gian chờ phiên máy chủ tối đa trừ một số phần đệm, sau khi người dùng không gửi bất kỳ yêu cầu nào đến máy chủ, UI hiển thị "phiên là sắp hết giờ, bạn có muốn tiếp tục không? " (giống như bạn có trên ngân hàng trực tuyến)
Ưu điểm : Khắc phục sự cố
- Nhược điểm : Không thể nghĩ ra bất kỳ thứ gì ngoại trừ nhu cầu đảm bảo đồng bộ hóa hoạt động
Câu hỏi
Tôi có thể thiếu một cái gì đó trong phân tích ở trên, có thể có một số sai lầm ngớ ngẩn, và tôi muốn bạn giúp đỡ để sửa chúng. Tôi có thể có giải pháp nào khác cho việc này?
now
. 4.2 nghe có vẻ là một cách tuyệt vời để tiêu diệt máy chủ của bạn và tăng chi phí 4.3 Trên Android, khi quay lại màn hình chính, tôi khá chắc chắn rằng quá trình này bị tạm dừng và điều đó cũng có thể gây trở ngại cho bộ đếm thời gian của máy khách.