2011-12-07 32 views
5

Tôi có một ứng dụng giỏ hàng có các mục duy nhất với số lượng 1 - Tôi cần cạn kiệt số lượng cổ phiếu khi người dùng đặt một trong giỏ để tránh người khác mua nó. Vấn đề là, nếu họ từ bỏ giỏ hàng mà không cần mua, tôi cần phải đưa vật phẩm vào kho.PHP chạy tập lệnh khi phiên hết hạn

Có cách nào để tôi có thể bổ sung kho khi phiên giỏ hàng hết hạn không? tức là chạy một kịch bản để thay thế cổ phiếu.

+0

Điều đó có vẻ hơi lạ khi thực hiện theo cách đó. Tôi có thể, ví dụ, thêm tất cả các mục của bạn vào giỏ hàng của tôi. Nếu phiên bình thường của bạn là 20 phút bạn sẽ không có cổ phần trong 20 phút. Tại sao không chỉ có nó loại bỏ các cổ phiếu khi ai đó kiểm tra ra? Sau đó bạn có thể có một kiểm tra khi họ nhấp vào kiểm tra để chắc chắn rằng nó vẫn còn trong kho. –

+0

Tôi sẽ không xóa chúng khỏi kho khi đưa chúng vào giỏ hàng nhưng chỉ khi chúng thực sự được mua. – Gumbo

+0

Cảm ơn, tôi đồng ý nhưng đó không phải là quyết định của tôi! –

Trả lời

4

Bạn có thể sử dụng session_set_save_handler để tạo lớp xử lý phiên tùy chỉnh. Khi bạn thực hiện việc này, bạn có thể quyết định các hành động khác cần chạy khi trình thu thập rác được gọi hoặc tại phiên hủy. Nếu bạn quyết định làm việc với bộ thu gom rác, hãy đảm bảo rằng bạn cũng biết các giá trị cho session.gc_divisorsession.gc_probability và cũng hiểu những gì chúng làm (các thiết lập này xác suất mà bộ thu gom rác sẽ chạy).

+0

Đây là những gì chúng tôi sẽ cảm ơn bạn –

+0

@jimsmith Tôi rất vui vì nó giúp – mishu

0

Tạo bảng cơ sở dữ liệu để theo dõi hoạt động phiên, giả sử sessions. Trong đó, hãy đặt ít nhất các trường session_id và trường DATETIME hoặc TIME được gọi là last_activity.

Nếu bạn chưa có, hãy tạo bảng carts chứa nội dung của giỏ hàng (như product_idquantity) và có liên kết đến session_id. Sau đó, có 2 trường hợp:

  1. Người dùng hoàn thành đơn đặt hàng, chỉ cần "xóa" các hàng trong bảng carts thuộc phiên của họ.
  2. Người dùng từ bỏ giỏ hàng, gọi một cronjob kiểm tra xem giá trị last_activity có nhiều hơn bạn muốn không (nói, sau đó hơn một giờ trước). Làm cho tập lệnh đó cung cấp lại nguồn cung của bạn với số lượng trong giỏ hàng.

Lưu ý rằng bạn sẽ cần phải cập nhật trường last_activity trong bộ nạp/tải khởi động (cơ chế được kích hoạt trên mọi trang được tải).

1

Để tránh nhu cầu công việc cron; giữ cho nó đơn giản:

  1. Một người sử dụng chọn đặt một đối tượng trong/giỏ cô mình
  2. Timestamp cho "đặt đối tượng trong giỏ" được lưu trữ trong cơ sở dữ liệu, và một dấu thời gian timeout được lưu trữ quá. Ví dụ: (time() + (60*20))
  3. Người dùng đóng trang web
  4. Trên mỗi lần tải trang, bạn thực hiện truy vấn mysql đơn giản để kiểm tra xem dấu thời gian có nhỏ hơn dấu thời gian hiện tại hay không. Nếu truy vấn trả về kết quả, hãy xóa khỏi giỏ và đặt lại vào vị trí.

(này yêu cầu bạn cập nhật một số loại "Hoạt động cuối cùng" trong cơ sở dữ liệu quá)

nên được khá thẳng về phía trước.

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