2012-04-23 36 views
10

Tôi muốn hiểu được bốn lựa chọn của cURL cho cookie:cURL - cookie và các buổi

CURLOPT_COOKIESESSION 
CURLOPT_COOKIEFILE 
CURLOPT_COOKIEJAR 
CURLOPT_COOKIE 

Tôi hiểu rằng COOKIEJAR là có nghĩa là để viết các tập tin cookie, và COOKIEFILE là có nghĩa là để đọc. Vì vậy, COOKIESESSION là gì? CURLOPT_COOKIE là tùy chỉnh, nhưng tôi có thể sử dụng nó để duy trì phiên làm việc với máy chủ không?

+1

không phải là thứ hai và thứ tư giống nhau? – Pheonix

Trả lời

19

Để hiểu CURLOPT_COOKIESESSION, bạn cần biết một vài điều về cookie. Cookie có ngày hết hạn được đặt bởi trang web phát hành cookie. Nếu một ngày hết hạn của một cookie đã qua, trình duyệt/khách hàng sẽ không gửi nó, và nó sẽ bị xóa bởi khách hàng. Nếu cookie được đặt với ngày hết hạn KHÔNG, trình duyệt sẽ sử dụng cookie đó cho đến khi phiên trình duyệt bị đóng hoặc người dùng đăng xuất và cookie không được đặt.

Điều đó nói rằng, CURLOPT_COOKIESESSION là một cách để có được cURL để mô phỏng đã đóng trình duyệt. Nếu COOKIEFILE có một số cookie phiên trong đó (cookie không hết hạn), thông thường sẽ gửi các cookie này nếu chúng có trong tệp. Nếu bạn đặt CURLOPT_COOKIESESSION, thì nó sẽ KHÔNG gửi bất kỳ cookie nào không có ngày hết hạn.

CURLOPT_COOKIE chỉ cung cấp cho bạn phương tiện thiết lập dữ liệu cookie sẽ được gửi đến máy chủ ở định dạng thô. Điều này hữu ích nếu ví dụ bạn có cookie HTTP thô mà bạn muốn gửi. Nếu không có tùy chọn này, bạn sẽ phải nhận các cookie đó vào số COOKIEFILE hoặc đặt tiêu đề HTTP tùy chỉnh Cookie: với giá trị thô mà bạn có.

+0

Tôi cần sử dụng hai tập lệnh riêng biệt cần chia sẻ cùng một cookie phiên. vì vậy tôi muốn ** (1) ** bắt đầu một phiên mới với máy chủ, ** (2) ** duy trì phiên cho một số trang (init, set, exec, close), ** (3) ** đóng tập lệnh. ** (4) ** mở tập lệnh mới, ** (5) ** tiếp tục cùng một phiên, ** (6) ** và đóng và xóa cookie. Vì vậy, tôi nên bắt đầu với COOKIESESSION = TRUE, COOKIEJAR = cookiefilename và COOKIEFILE = cookiefilename, cho người đầu tiên. COOKIESESSION = FALSE, COOKIEFILE = cookiefilename cho tập lệnh 1 và chỉ cần tiếp tục trong tập lệnh 2 mà không có COOOKIESESSION = TRUE? – Ted

+0

Tùy thuộc vào việc cookie đăng nhập có thực sự là cookie phiên hay cookie liên tục hay không. Nếu nó là sau này, hơn COOKIESESSION sẽ không giúp đỡ. Để an toàn, bạn chỉ có thể xóa nội dung của tệp cookie trước khi bạn bắt đầu bằng tập lệnh 1. Hoặc bạn có thể có tập lệnh 2 thực sự đăng xuất khỏi trang web được đề cập bằng cách nhấn url đăng xuất. Tôi nghĩ rằng trong cả hai kịch bản 1 và kịch bản 2, tôi sẽ chỉ định cả COOKIEFILE và COOKIEJAR, do đó nếu khi script2 thực hiện một yêu cầu, bất kỳ sửa đổi nào đối với cookie sẽ được lưu vào tệp. COOKIESESSION là false theo mặc định là tốt. – drew010

+0

chúng là tuần tự. sau khi script 2 kết thúc, tôi xóa cookiefile bằng cách hủy liên kết. Tôi đoán tôi có thể nói đó là một cookie phiên bởi điều này: PHPSESSID. Nên nó là. Liệu những gì tôi đã nói một bình luận trước đây, (COOKIESESSION = TRUE cho người đầu tiên, sai cho phần còn lại) có đúng không? – Ted

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