2012-01-10 34 views
7

Tôi có một ứng dụng PHP dựa nhiều vào các phiên. Chúng tôi hiện đang cân nhắc xây dựng API cho người dùng của mình. Suy nghĩ ban đầu của chúng tôi là người dùng sẽ cần phải xác thực với api bằng địa chỉ email, mật khẩu và khóa API của họ (duy nhất cho mỗi người dùng).Xác thực API PHP và các phiên

Tuy nhiên, vì ứng dụng hiện tại (bao gồm cả các mô hình) dựa trên phiên người dùng rộng rãi, tôi không chắc chắn về cách tiếp cận tốt nhất.

Giả sử rằng một yêu cầu API được xác thực một cách chính xác, nó sẽ được chấp nhận:

  • Bắt đầu phiên cho cuộc gọi API khi người dùng được xác thực
  • Chạy các mô hình và trở về json/xml cho người sử dụng
  • Giết phiên

Điều này có nghĩa rằng phiên được khởi tạo cho mỗi cuộc gọi API, và sau đó ngay lập tức đỏ mặt. Điều này có ổn không? Hay chúng ta nên xem xét các lựa chọn thay thế khác?

+0

Bạn chính xác, API phải là trạng thái không trạng thái và không sử dụng phiên/cookie nếu có thể. Nhưng điều đó có thể được thực hiện dễ dàng, không sao cả. Tuy nhiên, bạn nên sử dụng lại khung xác thực hiện tại vì nó thực sự phức tạp. Ví dụ: hãy xem https://github.com/delight-im/PHP-Auth, cả hai đều không có khung công tác bất khả tri và không có cơ sở dữ liệu. Sau đó gửi thông tin đăng nhập với mọi yêu cầu và trên máy chủ (1) đăng nhập, (2) thực hiện công việc thực tế và cuối cùng (3) đăng xuất lại. – caw

Trả lời

1

Trong kinh nghiệm tạo API, tôi đã thấy tốt nhất là phiên chỉ kéo dài cho một yêu cầu và tạo lại thông tin phiên trong mỗi chu kỳ thực thi.

Điều này rõ ràng là giới thiệu chi phí nếu phiên làm việc của bạn là đáng kể, tuy nhiên nếu bạn chỉ kiểm tra thông tin xác thực đối với cơ sở dữ liệu thì nó sẽ là OK. Thêm vào đó, bạn có thể cache bất kỳ việc nâng hạng nặng nào đó như APC hoặc memcache dựa trên mã nhận diện người dùng thay vì phiên làm giảm công việc cần thiết để tạo lại phiên trong khi đảm bảo xác thực trong mỗi yêu cầu.