2008-12-29 28 views
7

Sử dụng trạng thái phiên trong quá trình là điều ác khi nói đến các ứng dụng web mở rộng quy mô (không hoạt động tốt với các cụm, bom khi máy chủ tái chế).Sử dụng cookie cho trạng thái phiên web - những cạm bẫy là gì?

Giả sử bạn chỉ cần giữ một lượng thông tin nhỏ trong trạng thái phiên, nhược điểm của việc sử dụng các mục cookie được mã hóa cho mục đích này thay vì các máy chủ/db nhà nước cụ thể là gì?

Rõ ràng việc sử dụng cookie sẽ tạo ra một lượng nhỏ chi phí mạng và rõ ràng bạn hoạt động theo giả định rằng cookie được bật trên trình duyệt/thiết bị di động của khách hàng.

Bạn có thể thấy những cạm bẫy nào khác bằng cách tiếp cận?

Đây có phải là lựa chọn tốt cho các phiên đơn giản, có thể mở rộng và mạnh mẽ không?

+0

tùy thuộc vào những gì đang cố gắng lưu trữ – Shawn

+0

Lượng thông tin rất nhỏ, vì cookie sẽ được mã hóa nội dung cookie thực tế không nên quan trọng, quan trọng hơn sẽ là kích thước. Suy nghĩ? –

Trả lời

7

Đây là một cách tiếp cận tuyệt vời cho các phiên đơn giản, có thể mở rộng và mạnh mẽ. Tất nhiên chất lượng của mật mã của bạn là quan trọng, và đó thường là thứ thường chứng minh khó khăn để có được quyền, nhưng nó có thể làm được.

Tôi không đồng ý với một số các áp phích khác:

Bất kỳ cuộc tấn công replay có thể được đưa ra chống lại một giá trị cookie được mã hóa có thể được đưa ra chống lại một session key được lưu trữ như một cookie. Sử dụng https nếu điều này quan trọng.

Dữ liệu phiên được lưu trữ trong máy chủ trạng thái hoặc cơ sở dữ liệu cũng bị mất nếu cookie bị xóa; khi khóa phiên bị mất, phiên không thể truy xuất được nữa.

2

Một điều đáng tiếc khác là chúng có thể bị đánh cắp và phát lại trên trang web của bạn.

BTW: Thay vì lưu trữ một số nội dung trong cookie, bạn cũng nên lưu trữ khóa trong cookie và sử dụng một cái gì đó như memcached (memcached hoạt động trên máy chủ trang trại).

+0

Điểm tốt. Điều này có thể được chống lại với một thành phần cookie timestamp được mã hóa không? –

+0

Điều đó sẽ có hiệu quả. – yfeldblum

2

Cũng thường một cookie được sử dụng cho ID phiên, miễn là số lượng thông tin nhỏ sẽ là một tùy chọn tốt để lưu trữ thông tin trong cookie, mặc dù bạn không nên lưu trữ bất kỳ giá trị nào (như Số CC, SSN, vv) thực sự nên được lưu trữ trong cookie, ngay cả khi được mã hóa.

Tôi không có chuyên gia, nhưng theo kinh nghiệm của tôi, tôi đã tìm thấy những điều sau đây là đúng (ít nhất bằng cách sử dụng PHP và ASP.Net).

Cookie

  • [pro] Thích ứng tốt, vì nó được truyền trên mọi yêu cầu
  • [pro] Cookie có thể được yêu cầu chỉ nộp thông qua một kết nối SSL
  • [ pro] Có thể sử dụng công nghệ máy chủ chéo và máy chủ chéo
  • [con] Dữ liệu được truyền trên mọi yêu cầu và trả lời se
  • [con] Cần phải được kích hoạt trên trình duyệt

State Server/DB

  • [pro] Dữ liệu được lưu trữ chỉ trên máy chủ
  • [pro ] Dữ liệu vẫn tồn tại ngay cả khi người dùng xóa cookie
  • [pro] Có thể sử dụng công nghệ máy chủ chéo
  • [con] yêu cầu ID phải được chuyển theo yêu cầu/phản hồi (do đó yêu cầu cookie hoặc gắn vào mỗi URL)
  • [con] không mở rộng tốt các chế độ mặc định, nhưng nếu toàn bộ (các) máy có thể được dành riêng và dành riêng cho nhà nước thì đây không phải là vấn đề lớn. Rất nhiều kỹ thuật mở rộng khác có thể được theo sau để mở rộng.
  • [con] Yêu cầu biến ID phiên được chuyển qua URL hoặc Cookie hoặc các phương tiện khác, để giữ cho người dùng bị ràng buộc với dữ liệu.
+3

Bạn đã bỏ lỡ con lớn nhất của máy chủ trạng thái: STILL YÊU CẦU MỘT COOKIE. –

+0

Điểm hợp lệ, tôi sẽ cập nhật, nhưng tôi đã thực tế là bản thân dữ liệu không được lưu trữ trong cookie. –

Các vấn đề liên quan