2013-06-11 26 views
7

Tôi có một ứng dụng Android yêu cầu máy chủ web của tôi qua cả WebView và HttpClient. Tôi đồng bộ hóa cookie giữa hai người sử dụng CookieSyncManager. Càng xa càng tốt.Vòng đời của cookie phiên trong Android WebView/CookieSyncManager

Khi ứng dụng của tôi bắt đầu (bên trong onResume()), tôi chạy một mảnh của logic tương tự như sau:

if (appHasBeenIdleFor30Minutes()) { 
    CookieManager cookieManager = CookieManager.getInstance(); 
    cookieManager.removeSessionCookie(); 
    CookieSyncManager.getInstance().sync(); 
} 

này reset một cách chính xác bất kỳ cookie phiên đã được thiết lập từ phiên trước đó của người dùng. Câu hỏi của tôi là: hành vi này có xảy ra định kỳ không? Câu hỏi này (android webview or browser not deleting session cookies on device reboot) dường như gợi ý rằng nó không. Khi tôi sử dụng HttpClient cookie-sync'd thông qua một Service nó xuất hiện rằng các cookie phiên không được xóa, do đó dẫn đến hành vi phía máy chủ lạ.

Tôi không thể tìm thấy tài liệu cụ thể về vòng đời của cookie phiên (thời gian hết hạn = 0) bên trong một WebView/CookieSyncManager - có ai khác có may mắn hơn không?

+0

Câu hỏi và trả lời của bạn đã giúp tôi nhưng tôi sẽ đề xuất với bạn rằng bạn hết hạn cookie ở phía máy chủ vì những cân nhắc về bảo mật. Ai đó có thể chặn giá trị cookie và thậm chí bạn có thể hết hạn giá trị trên cùng một khách hàng có thể được sử dụng để chiếm đoạt phiên. Cũng lưu ý rằng bạn nên xem xét ode trên người dùng không tin cậy và họ có thể thay đổi hành vi này bằng cách thay đổi apk của bạn hoặc thậm chí sử dụng một cái gì đó như khung Xposed. – PSIXO

Trả lời

13

tôi nhận được phản hồi trực tiếp từ một kỹ sư của Google, người khẳng định nghi ngờ của tôi:

Bạn là chính xác, cookie phiên không tự động hết hạn trong vòng đời của một WebView. Nếu bạn gặp sự cố với điều này, bạn luôn có thể xóa tất cả các cookie hoặc ghi đè lên cookie phiên của bạn một cách rõ ràng với giá trị trống.

Mã bạn đã gợi ý trông giống như một cách giải quyết tốt, chỉ cần lưu ý rằng cookie đồng bộ sử dụng một CookieSyncManager là không đồng bộ - các startSync(), stopSync() và đồng bộ() lệnh được thực hiện không đồng bộ trong một nền chủ đề.

TL; DR-phiên cookie không hết hạn khi WebView đóng, bạn sẽ phải tự mình quản lý.

+5

Sẽ rất tuyệt nếu bạn có thể cung cấp liên kết đến câu trả lời này. – marwinXXII

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