HTTP là một giao thức phi trạng thái vì một lý do. Phiên trạng thái hàn lên HTTP. Theo nguyên tắc thông thường, tránh sử dụng trạng thái phiên.
CẬP NHẬT: Không có khái niệm về một phiên ở cấp HTTP; máy chủ cung cấp điều này bằng cách cung cấp cho khách hàng một ID duy nhất và yêu cầu khách gửi lại nó theo mọi yêu cầu. Sau đó, máy chủ sử dụng ID đó làm khóa thành một hàm băm lớn của các đối tượng Phiên. Bất cứ khi nào máy chủ nhận được yêu cầu, nó sẽ tra cứu thông tin Phiên từ các đối tượng phiên có thể băm của nó dựa trên ID mà khách hàng đã gửi cùng với yêu cầu. Tất cả công việc làm thêm này là một sự thay đổi gấp đôi về khả năng mở rộng (một lý do lớn khiến HTTP không trạng thái).
- Whammy One: Nó làm giảm công việc mà một máy chủ có thể làm.
- Whammy Two: Điều này khiến việc mở rộng quy mô trở nên khó khăn hơn vì bây giờ bạn không thể định tuyến một yêu cầu đến bất kỳ máy chủ cũ nào - tất cả chúng đều không có cùng một phiên. Bạn có thể ghim tất cả các yêu cầu với ID phiên đã cho vào cùng một máy chủ. Điều đó không dễ dàng và đó là một điểm thất bại duy nhất (không phải đối với toàn bộ hệ thống, mà đối với khối lượng lớn người dùng của bạn). Hoặc, bạn có thể chia sẻ bộ lưu trữ phiên trên tất cả các máy chủ trong cụm, nhưng bây giờ bạn có độ phức tạp cao hơn: bộ nhớ gắn mạng, máy chủ phiên độc lập, v.v.
Với tất cả những điều đó, bạn càng đưa nhiều thông tin vào phiên, tác động đến hiệu suất càng lớn (như Vinko chỉ ra). Cũng như Vinko chỉ ra, nếu đối tượng của bạn không tuần tự hóa, phiên sẽ hoạt động sai. Vì vậy, theo nguyên tắc thông thường, tránh đặt nhiều hơn mức cần thiết trong phiên.
@Vinko Bạn thường có thể làm việc xung quanh việc có trạng thái lưu trữ máy chủ bằng cách nhúng dữ liệu bạn đang theo dõi trong phản hồi bạn gửi lại và yêu cầu khách hàng gửi lại, ví dụ: gửi dữ liệu xuống trong một đầu vào ẩn. Nếu bạn thực sự cần theo dõi trạng thái phía máy chủ, có lẽ nó phải ở trong kho dữ liệu sao lưu của bạn.
(Vinko cho biết thêm: PHP có thể sử dụng cơ sở dữ liệu để lưu trữ thông tin phiên và để khách hàng gửi lại dữ liệu mỗi lần có thể giải quyết các vấn đề về khả năng mở rộng tiềm năng, nhưng mở ra một vấn đề lớn về bảo mật mà bạn phải chú ý ngay bây giờ khi khách hàng kiểm soát được tất cả tiểu bang của bạn)