Nói chung, Java EE Web Apps có xu hướng không mong đợi để lưu dữ liệu phiên phía máy khách. Bạn có quyền lo ngại về bloat phiên ở phía máy chủ, một vấn đề phổ biến được thấy là có các dấu chân phiên lớn có thể gây ra các vấn đề về hiệu suất và tài nguyên đáng kể và có thể đặc biệt trong môi trường nhóm.
Tôi muốn biết nơi bạn nhìn thấy
Tôi đã đọc mà bạn có thể sử dụng FacesContext.getExternalContext(). GetSession/getSessionMap() mà sẽ tiết kiệm biến phiên tại phía khách hàng.
Tôi tin rằng (chính xác cho tôi vào thời điểm này) rằng đây chỉ đơn giản là cho phép truy cập đến đối tượng HttpSession, trên đó thì bạn có thể sử dụng cùng một
session.setAttribute("myObj", myObject)
này không tự nó gửi các đối tượng trở lại khách hàng, nó được giữ trong máy chủ và được khóa bởi một số định danh phiên, thường được chuyển trong cookie. Bây giờ có hai kỹ thuật khác: bạn có thể chọn để đưa dữ liệu vào một cookie sản xuất của riêng bạn - các API servlet mà bạn có thể truy cập từ JSF hoặc JSP sẽ cho phép bạn thực hiện điều đó hoặc bạn có thể sử dụng các trường ẩn các biểu mẫu của bạn và do đó chuyển dữ liệu phiên aorund.
Nhưng hãy cân nhắc điều này. Quy tắc chung trên Máy chủ ứng dụng tôi sử dụng là HttpSession thứ tự của 1k-4k có xu hướng không phải là vấn đề. Lớn hơn thế (và tôi đã thấy các phiên được đo bằng megabyte) làm căng thẳng cơ sở hạ tầng.Nếu bạn lo ngại về các phiên có kích thước đó, bạn có thể gửi dữ liệu megabyte trong cookie hoặc trường ẩn trở lại trình duyệt theo mọi yêu cầu không? Ngay cả 1k-2k có lẽ là một chút lớn.
Vì vậy, khuyến nghị:
Giữ nó đơn giản. Sử dụng API phiên hoặc biểu hiện JSF của nó.
Giữ lượng dữ liệu trong phiên dưới sự kiểm soát.
gia tăng để đáp ứng với câu hỏi về phân nhóm:
Thông thường, trong một môi trường clustered chúng tôi có phiên mối quan hệ, do đó yêu cầu được gửi lại cho các cluster member cùng. Tuy nhiên chúng tôi vẫn cần phải xem xét trường hợp (có lẽ nếu một thành viên cụm không thành công) khi yêu cầu đi đến một máy chủ khác nhau. Một số nhà cung cấp Máy chủ ứng dụng cung cấp bản sao phiên, thông qua liên lạc trực tiếp giữa máy chủ hoặc bằng cách duy trì phiên tới cơ sở dữ liệu - rõ ràng là có chi phí ở đây, vì vậy đôi khi, đối với phiên có giá trị thấp, chúng tôi chỉ chấp nhận mất phiên trong sự kiện của sự thất bại.
Có một lập luận rằng nếu dữ liệu phiên có giá trị cao thì nó sẽ được ứng dụng lưu giữ, nó thực sự là dữ liệu nghiệp vụ và cần được xử lý như vậy. Càng ngày, các cơ sở dữ liệu NOSQL như Cloudant hoặc MongoDb được sử dụng cho việc này. Trong trường hợp này, chúng ta có thể nghĩ về phiên HTTP như một bộ nhớ đệm, trong kiến thức rằng dữ liệu phiên có thể được truy xuất trong trường hợp có lỗi.
Vì vậy, tôi cho rằng Giỏ hàng có thể có giá trị đáng kể đối với doanh nghiệp; nó đại diện cho khách hàng tích lũy chu đáo về những thứ họ muốn tiêu tiền. Vì vậy, nó nên được duy trì, thay vì sau đó chỉ giữ trong phiên. Khi chúng tôi quyết định vẫn tồn tại, chúng tôi thấy rằng nó dẫn đến các tình huống thú vị khác như trải nghiệm tổng hợp trên nhiều thiết bị khách. Khách hàng bắt đầu mua sắm tại nhà trên máy tính để bàn nhưng hoàn tất việc mua hàng trực tuyến.
Vì vậy, nguyên tắc khác:
3). Không sử dụng quá nhiều phiên HTTP chỉ vì nó ở đó. Xem xét giá trị kinh doanh của dữ liệu và liệu nó có nên được duy trì hay không.
"mỗi yêu cầu sẽ tạo ra một phiên bản mới của đậu phạm vi phiên" Đây là HOÀN THÀNH HOÀN THÀNH –