2012-10-06 32 views
5

Cách thích hợp để gửi cookie 'đầy đủ' qua URLConnection là gì?Làm cách nào để gửi cookie trong URLConnection?

Tôi đã sử dụng:

URL url = new URL(page); 
URLConnection urlConn = url.openConnection(); 

urlConn.setRequestProperty("Cookie", myCookie); 

urlConn.setUseCaches(true); 

urlConn.connect(); 

Giá trị myCookie được testCookie = d1lEZk9rSHd3WnpBd2JkWGRhN1RYdz09OkEwQ21pSFJVZzBpVDhhUENaK3ZPV2c9PQ

Có cách nào để gửi Path, Domain, và Expires với nó? Bạn có cần mã hóa giá trị theo một cách nào đó không?

Trả lời

3

Vâng, nếu bạn chỉ thiết lập một cookie Tôi đoán bạn chỉ có thể làm như sau:

urlConn.setRequestProperty("Cookie", "user=mary17; domain=airtravelbargains.com; path=/autos"); 

Nếu bạn đang thiết hơn một cookie hơn bạn có thể có thể sử dụng phương pháp addRequestProperty để thay thế.

Đối với thuộc tính hết hạn, hãy đảm bảo sử dụng định dạng: Ngày trong tuần, DD-Mon-YY HH: MM: SS GMT.

Múi giờ pháp lý duy nhất là GMT và dấu phân tách giữa các phần tử của ngày phải là dấu gạch ngang.

12

This (currently accepted) answer là sai - cho http khách hàng bạn sử dụng ; tách cho nhiều giá trị cookie, vì vậy ví dụ mình thực sự sẽ gửi ba coookies:

  • user=mary17
  • domain=airtravelbargains.com
  • path=/autos

Nếu chúng ta đang nói về một ser ver phản ứng và Set-Cookie tiêu đề, câu trả lời sẽ là đúng, nhưng chúng tôi không - urlconnection là cho khách hàng kết nối với máy chủ.

Vậy thông tin về số Domain, Expires, Path mà bạn đã yêu cầu là gì? Vấn đề là, bạn không phải là nghĩa là để gửi thông tin đó. Đường dẫn, miền và hết hạn chỉ là các hướng dẫn được gửi tới trình duyệt (hoặc bất kỳ ứng dụng khách HTTP nào khác), vì chúng là hướng dẫn cho khách hàng. Bạn chỉ muốn gửi cookie hợp lệ giá trị cho máy chủ, do đó không có cách nào để gửi thông tin bạn đã yêu cầu vì nó sẽ không có ý nghĩa gì.

Bạn có thể tự mình xem bằng cách duyệt bất kỳ phiên HTTP nào bạn có trong trình duyệt của mình. Trình duyệt sẽ chỉ gửi những nội dung như sau:

Cookie: cookiename=value; anothercookie=othervalue; 

Điều này được cho là như vậy.

Hoặc, bạn có thể kiểm tra RFC 6265, nơi bạn có thể nhìn thấy trực tiếp từ các bảng nội dung mà Domain, Expires, Path là thuộc tính của các Set-Cookie tiêu đề (gửi đến trình duyệt), chứ không phải của Cookie tiêu đề (gửi bằng trình duyệt hoặc máy khách http khác đến máy chủ).

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