2013-08-22 61 views
6

Cách lý tưởng để lưu trữ thông tin sản phẩm trong giỏ hàng trong asp.net

Tôi đang tạo một ứng dụng thương mại điện tử, trong đó tôi có một giỏ mua hàng.

Cấu trúc hiện tại của tôi là, bất cứ khi nào người dùng lưu sản phẩm, tôi đặt sản phẩm vào dữ liệu có thể định cấu hình và dữ liệu cho phiên, vì vậy cho đến khi phiên không hết thời gian, người dùng có thể có danh sách họ đã lưu.

Tuy nhiên, tôi đã tăng thời gian chờ của phiên lên 600mins (10 giờ), nhưng đây là cách tiếp cận tốt nhất để lưu trữ thông tin giỏ mua hàng, vì nếu có 1000 người dùng truy cập trang web cùng một lúc, sẽ có 1000 phiên đối tượng được tạo trên máy chủ, sẽ không làm giảm hiệu suất của trang web của tôi.

Tôi không thể lưu trữ trong cơ sở dữ liệu vì nếu người dùng ẩn danh tôi không có điều duy nhất về người dùng, theo cách đó, nếu 1000 người dùng truy cập trang web, tất cả sản phẩm sẽ hợp nhất, tôi sẽ không thể tìm nạp sản phẩm được lưu bởi người dùng hiện tại.

Có cách tiếp cận nào khác tốt hơn cho vấn đề này không.

Trả lời

19

Bạn không nên triển khai như thế này. Các phiên trong 10 giờ rất dài, nếu bạn có 1000 người dùng trên trang web, máy chủ của bạn sẽ bị ảnh hưởng và sẽ tạo ra một số vấn đề về hiệu suất.

Trên trang web thương mại điện tử của chúng tôi, chúng tôi tạo cookie cho người dùng ẩn danh. Sau khi thực hiện việc này, bạn có hai giải pháp:

  1. Lưu toàn bộ giỏ hàng trong cookie (về cơ bản danh sách số lượng ID sản phẩm, tùy theo nhu cầu/chiến lược) hoặc các kỹ thuật khác (ví dụ: localStorage).
  2. Lưu trữ ID duy nhất trong cookie và lưu trữ giỏ trong cơ sở dữ liệu (bảng tạm thời) với ID cookie duy nhất làm số nhận dạng. Khi người dùng đăng nhập vào hệ thống, bạn chuyển các dữ liệu đó vào bảng giỏ của người dùng.

Bạn có thể dễ dàng thay đổi thời gian hết hạn của cookie (hoặc xóa) mà không ảnh hưởng đến hiệu suất tổng thể của máy chủ. Đối với ID, bạn có thể sử dụng Guid.NewGuid().

UPDATE:

Thông tin chi tiết về giải pháp thứ hai của tôi - kịch bản:

  1. trang web truy cập tài khoản
  2. Bạn tạo một cookie không có ngày hết hạn: cartId với giá trị Guid.NewGuid() (tên và giá trị tùy thuộc vào bạn).
  3. tài khoản click vào nút "Mua"
  4. Nhận cookie server-side và thêm cartId, sản phẩm/lượng vào "AnonymousBasket" bảng
  5. Hãy tưởng tượng người dùng rời khỏi trang web và trở lại một tháng sau cookie sẽ vẫn còn ở đây
  6. Nếu người dùng ẩn danh vào giỏ, bạn có thể lấy sản phẩm và số lượng của mình dựa trên giá trị của cookie.
  7. Nếu người dùng đăng nhập vào bạn loại bỏ các tập tin cookie và di chuyển dữ liệu từ bảng "AnonymousBasket" thành "Basket"
  8. Bây giờ bạn đăng nhập người dùng có thể xử lý đến kiểm tra

Với giải pháp tất cả mọi thứ này vẫn kiên trì trong cơ sở dữ liệu và không yêu cầu phiên.Bạn có thể thay đổi hết hạn cookie như bạn làm cho phiên, bạn có thể dọn dẹp bảng tạm thời mà không gặp rủi ro hoặc tạo thống kê về người dùng ẩn danh (tại sao họ không tiến hành thanh toán, số mục trung bình, mục nào,. ..).

+0

Xin chào @glautrou, đó có thể là giải pháp tốt, nhưng điều gì sẽ xảy ra nếu cookie bị vô hiệu hóa ở cuối ứng dụng khách. – Abbas

+0

Nếu các phiên vô hiệu hóa cookie cũng có khả năng bị vô hiệu hóa. Nếu bạn quan tâm đến JavaScript bị vô hiệu hóa, bạn có thể chuyển "ID giỏ hàng" trong tất cả các URL của mình. Điều này không phải là rất tốt đẹp, nhưng bạn không có nhiều sự lựa chọn trong trường hợp đó. – glautrou

+0

Tôi đoán cookie được lưu trữ ở phía máy khách và các phiên trên máy chủ, do đó người dùng không thể tắt phiên từ cuối trình duyệt vì nó nằm trên máy chủ. – Abbas

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