các ứng dụng web nên không trạng thái
Vô lý. Yêu cầu web nên không trạng thái. Hay chính xác hơn, các yêu cầu web là không trạng thái.
Nhưng, nói rằng toàn bộ ứng dụng nên không trạng thái là hoàn toàn vô nghĩa.
mỗi yêu cầu được coi là một giao dịch độc lập.
Vâng, chính xác . Hay chính xác hơn là có, nhất thiết phải có . Qua HTTP, mỗi yêu cầu vốn đã độc lập với tất cả các yêu cầu khác. Việc thêm "trạng thái" vào HTTP yêu cầu bạn xác định rõ ràng, lưu trữ và truy xuất "trạng thái" cho mỗi yêu cầu "trạng thái". Và điều đó đòi hỏi nỗ lực, giảm hiệu suất và thêm phức tạp.
Và, vì những lý do đó, mỗi yêu cầu có thể không trạng thái "nên" là không trạng thái.
Do đó, nên tránh Phiên và Cookies (vì cả hai đều có trạng thái). Cách tiếp cận tốt hơn là sử dụng Tokens
Một vài điều: Mã thông báo cũng có thể được gắn với lưu trữ phiên. Cookies không cần phải được gắn với lưu trữ phiên. Mã thông báo thường được lưu trữ trong cookie. Và, đôi khi một phiên chỉ đơn giản là công cụ phù hợp cho công việc.
Điều đó có nghĩa là ít nhất , đôi khi , phiên và cookie cũng "tốt hơn" như mã thông báo!
[Mã thông báo] không trạng thái vì không có gì được lưu trữ trên máy chủ.
Vâng, đó là nó. Đó là những gì giáo điều "không quốc tịch" thực sự là về. Mặc dù, rõ ràng, đó không phải là về việc lưu trữ "không có gì" trên máy chủ, mà là về việc không lưu trữ trạng thái phiên trên máy chủ.
Hộp thư đến Gmail của tôi đang ở trạng thái chẳng hạn. Và nó tốt hơn nên được lưu trữ trên máy chủ! Nhưng, đó không phải là trạng thái phiên .
Vì vậy, thay vì có một máy chủ có thể nhận một số nhận dạng nhỏ và tìm ra bạn là ai, các ứng dụng không trạng thái muốn được nhắc nhở bạn là ai và bạn đang làm gì với mọi yêu cầu đẫm máu. Trạng thái ứng dụng vẫn tồn tại, khách hàng chỉ chịu trách nhiệm giữ nó.
Bây giờ, nếu trạng thái đó là nhỏ, điều đó có thể ổn. Trong một số trường hợp, nó rất tốt.
Và sau đó, tất nhiên, có những điều chúng ta chỉ đơn giản mong đợi là trạng thái ...
làm thế nào các ứng dụng web có thể không trạng thái khi có dữ liệu được lưu giữ cho phiên của tôi (chẳng hạn như các mặt hàng trong giỏ hàng)? Đây có thực sự được lưu trữ trong một cơ sở dữ liệu ở đâu đó và sau đó định kỳ bị thanh trừng?
Hai lựa chọn. Hoặc là bạn có một phiên, hoặc bạn đang từ chối!
... Nhưng nghiêm túc đấy. Bạn thường không lưu trữ một giỏ hàng trong một cookie. Một cái gì đó như giỏ hàng sẽ được lưu trữ trong phiên "truyền thống" hoặc nó sẽ được lưu trữ dưới dạng Cart
đối tượng, với một số loại ID mà máy chủ sử dụng để kéo nó vào các yêu cầu tiếp theo. Kiểu như một .. uhh ... ... err ... phiên.
Thực sự nghiêm túc: Có một mức độ lớn mà "tính trạng thái" chỉ là cái mà chúng ta gọi nó khi hai tác nhân giao tiếp có thể bối cảnh hóa các tin nhắn trong một cuộc trò chuyện. Và một phiên, theo truyền thống được hiểu, chỉ là những gì chúng ta thường gọi là cơ chế mà điều này xảy ra.
Tôi tranh luận rằng, bất kể bạn sử dụng mã thông báo hay "phiên", cho mỗi yêu cầu máy chủ của bạn xử lý, bạn cần phải bối cảnh hóa yêu cầu đó để thực hiện nó, hoặc bạn không. Nếu bối cảnh không cần thiết, đừng lấy nó. Nếu bối cảnh là cần thiết, tốt hơn bạn nên có nó gần đó!
Và sau đó là một câu hỏi liên quan, các trang web lớn (Amazon, Google, Facebook, Twitter, v.v.) có thực sự không trạng thái? Họ có sử dụng mã thông báo hoặc cookie (hoặc cả hai) không?
Có lẽ là cả hai. Nhưng, nói chung, họ làm chính xác những gì bạn làm: Họ đặt cookie để xác định các bản ghi "trạng thái" trong cơ sở dữ liệu "phiên" lớn.
Khi có thể, tôi nghi ngờ họ chuyển các khiếu nại nhận dạng cơ bản vào các "mã thông báo" ngắn hạn để tránh sự tranh chấp không cần thiết trên bộ lưu trữ tập trung. Nhưng, thực tế là nhiều dịch vụ trong số này cho phép tôi "đăng xuất khỏi tất cả các địa điểm khác" là một chỉ báo tốt cho thấy, nếu họ đang sử dụng mã thông báo, ít nhất họ sẽ được "hỗ trợ" bởi mô hình phiên bán truyền thống .