2008-12-12 17 views

Trả lời

17

Câu trả lời cơ bản là "bạn không thể".

Sau khi xem xét điều này một chút, tôi nghĩ rằng nó có thể, nhưng cực kỳ phức tạp. Nó sẽ liên quan đến việc triển khai resourceLoadDelegate trên WebView của bạn thực hiện -webView:resource:willSendRequest:redirectResponse:fromDataSource: và sửa đổi yêu cầu tắt HTTPShouldHandleCookies và thêm bất kỳ cookie có liên quan nào vào yêu cầu theo cách thủ công. Nó cũng phải thực hiện -webView:resource:didReceiveResponse:fromDataSource: để tìm hiểu về bất kỳ cookie nào được trả lại từ máy chủ. Bạn có thể phân bổ/init bản sao của riêng mình NSHTTPCookieStorage mỗi lần xem web và sử dụng để lưu trữ/truy xuất cookie.

+0

Heh. Thật ngạc nhiên. Tôi đã kết thúc việc thay đổi dịch vụ web để giải quyết các vấn đề tôi gặp phải. Tôi cho rằng đây là loại thông thường (chế độ riêng tư, kiểm tra nhiều người dùng, v.v ...). Cảm ơn đã xem xét này. – Dustin

+14

Tôi thực sự đã triển khai một lớp con WebView thực hiện điều này bằng cách sử dụng phương thức được mô tả trong câu trả lời này. http://igisolatedcookiewebview.googlecode.com/ (Giấy phép BSD mới). – Isaac

+0

@Isaac Wow, hoàn toàn hoàn hảo cho những gì tôi cần. Một vấn đề tôi nhận thấy là trong dòng 152 của tập tin .m của bạn (khởi tạo mảng cookieStore), nếu bạn đang sử dụng ARC và loại bỏ các cuộc gọi giữ lại, nó bị treo. Tôi chỉ cần sử dụng -fno-objc-arc trên tập tin đó. – sudo

0

Tôi giả định rằng cookie sẽ được định cấu hình ở cấp dịch vụ/ứng dụng chứ không phải cho các trường hợp hoặc quy trình cụ thể. Có lẽ bạn có thể sửa đổi câu hỏi của mình để tìm cách giải quyết vấn đề bạn đang gặp phải yêu cầu các phiên bản không chia sẻ cookie.

Động lực để không chia sẻ cookie giữa các trường hợp là gì?

Nếu bạn chỉ cần 3 lượt xem vào cùng một tài nguyên web, bạn có thể thiết lập một số máy chủ ảo trỏ đến cùng một nguồn dữ liệu.

+0

WebView là chế độ xem trình duyệt của webkit. Tôi đã có hiệu quả có hai cửa sổ nhìn vào cùng một trang web, và tôi muốn họ không được sử dụng cùng một phiên. – Dustin

3

This post tổng hợp những gì bạn có thể làm. Tôi không chắc liệu nó có khả thi cho bạn hay không và tôi cảm thấy nó không phải là một nhiệm vụ đơn giản, thậm chí có thể nguy hiểm, nhưng dường như là có thể: tác giả cho rằng iCab thực hiện theo cách này.

Tôi cũng hy vọng một giải pháp đơn giản hơn. Tất nhiên, vì Webkit là mã nguồn mở, bạn có thể tung ra phiên bản khung công tác của riêng mình với hành vi thay đổi mà tôi đoán?

0

Những gì bạn có thể làm là xem libcurl có thể xử lý các cửa hàng cookie không kết hợp với URL Tải bộ nhớ cookie cho toàn bộ hệ thống cho những yêu cầu bạn muốn tách biệt. Đối với tôi, đó dường như là một giải pháp hợp lệ và đơn giản. Nếu bạn thực sự cần phải phụ thuộc vào webview/webkit nó có thể không được.

+0

Vâng, công cụ webvivew khá quan trọng đối với tôi. Tôi có lẽ vẫn có thể làm cho nó đi, nhưng đã hy vọng để tránh viết lại thế giới. Thay vào đó tôi đã thay đổi máy chủ. *thở dài* – Dustin

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