2011-03-23 35 views
59

Tôi sử dụng số Android WebView for Twitter OAuth: Twitter yêu cầu người dùng đăng nhập và ủy quyền ứng dụng, tôi truy xuất mã thông báo truy cập và duy trì nó trong ứng dụng của tôi.Làm cho Android WebView không lưu trữ cookie hoặc mật khẩu

Tôi không cần (và không) lưu trữ mật khẩu người dùng, nhưng WebView giữ cookie của Twitter xung quanh, và nó cũng yêu cầu người dùng nếu anh ta muốn nó nhớ mật khẩu. Do đó, ngay cả sau khi ủy quyền ứng dụng thông qua trang tài khoản Twitter của mình và ứng dụng của tôi phá hủy mã thông báo truy cập, lần tiếp theo WebView được mở, có thể vẫn còn đăng nhập và thậm chí nếu không, nó có hộp mật khẩu đã được điền.

Làm cách nào để buộc WebView không yêu cầu nhớ mật khẩu và không duy trì cookie phiên? Nếu điều đó là không thể, tôi có thể xóa tất cả trạng thái được lưu trữ của nó (ngoại trừ bộ nhớ cache hình ảnh) không?

+0

Bạn có thể đánh dấu câu trả lời là đúng, xin vui lòng? –

Trả lời

92

Bạn có thể sử dụng để ngăn chặn cookie từ được lưu trữ và cookie sạch đã được lưu trữ:

CookieSyncManager.createInstance(this); 
CookieManager cookieManager = CookieManager.getInstance(); 
cookieManager.removeAllCookies(callback); 
cookieManager.setAcceptCookie(false); 

WebView webview = new WebView(this); 
WebSettings ws = webview.getSettings(); 
ws.setSaveFormData(false); 
ws.setSavePassword(false); // Not needed for API level 18 or greater (deprecated) 
+1

đây là câu trả lời hay nhất dành cho tôi! –

+1

Làm việc cho tôi khi tôi muốn đăng xuất thành công trong Twitter sử dụng WebView. Cảm ơn. :) –

+1

Điều này sẽ không xóa cookie khi 3 dòng được chạy? Nó không ngăn các cookie được lưu trữ. Điều đó sẽ yêu cầu một cái gì đó như 'cookieManager.setAcceptCookie (false)'. Điều đó nói rằng, điều này trả lời câu hỏi của tôi về cách xóa cookie, vì vậy cảm ơn. –

31

Đối với không lưu mật khẩu:

WebView webview = new WebView(this); 
WebSettings mWebSettings = webview.getSettings(); 
mWebSettings.setSavePassword(false); 
mWebSettings.setSaveFormData(false); 

Đối với cookie:

CookieManager cookieManager = CookieManager.getInstance(); 
cookieManager.setAcceptCookie(false); 

Tôi không phải là rất chắc chắn cho việc thực hiện các tập tin cookie.

+6

Cài đặtSaveFormData (false) cũng sẽ trợ giúp. – Karan

+0

@mudit, Không cần phải tạo một cá thể riêng biệt của 'WebSettings'. Bạn cũng có thể làm điều này. 'WebView webView = new WebView (this);' 'webView.getSettings.setSavePassword (sai);' – KULKING

+0

Hãy cẩn thận với hàm '.setSavePassword' vì nó không được dùng cho phiên bản 4.4 trở lên: http: // stackoverflow. com/a/19361928/62921 Trên các phiên bản đó, nó sẽ bị sai theo mặc định và cửa sổ bật lên sẽ không được hiển thị. – ForceMagic

2

Tôi đã sử dụng sau đây giải pháp:

CookieManager cookieManager = CookieManager.getInstance(); 
cookieManager.setAcceptCookie(false); 

theo phương pháp không làm việc cho tôi:

CookieManager cookieManager = CookieManager.getInstance(); 
cookieManager.removeAllCookie(); 

Lý do có thể là chúng tôi chưa đồng bộ hóa các cookie như sau:

CookieSyncManager.createInstance(getContext()).sync(); 

Nhưng nó có thể được dành thời gian.

Buộc WebView không yêu cầu ghi nhớ mật khẩu cũng sẽ không hoạt động.

Và cũng không tốt cho khả năng sử dụng.

10

Trong một dòng, Hãy thử điều này. Tôi nghĩ rằng điều này nên được gọi sau khi bắt đầu webview.

android.webkit.CookieManager.getInstance().removeAllCookie(); 
+1

làm việc cho tôi, ngắn gọn và đơn giản –

2

Đừng cookie rõ ràng + Nhà nó sẽ ảnh hưởng đến phiên khác như facebook vv .. lưu trữ bên trong cookie vì vậy hãy thử làm theo phương pháp này

Trước khi giao dịch oauth như trước khi tạo webview

CookieManager cookieManager = CookieManager.getInstance(); 
cookieManager.setAcceptCookie(false); 

Sau khi giao dịch oauth hãy chấp nhận cookie bằng cách thiết lập

cookieManager.setAcceptCookie(true); 

nó sẽ hoạt động tôi đã thử nghiệm nó ..

8

Đây là câu trả lời tốt nhất mà tôi đã thấy trong bối cảnh này

webView.clearCache(true); 
    webView.clearHistory(); 
    WebSettings webSettings = webView.getSettings(); 
    webSettings.setSaveFormData(false); 
    webSettings.setSavePassword(false); // Not needed for API level 18 or greater (deprecated) 

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP_MR1) { 
     CookieManager.getInstance().removeAllCookies(null); 
     CookieManager.getInstance().flush(); 
    } else { 
     CookieSyncManager cookieSyncMngr = CookieSyncManager.createInstance(this); 
     cookieSyncMngr.startSync(); 
     CookieManager cookieManager = CookieManager.getInstance(); 
     cookieManager.removeAllCookie(); 
     cookieManager.removeSessionCookie(); 
     cookieSyncMngr.stopSync(); 
     cookieSyncMngr.sync(); 
    } 
+0

Mã trong 'else' là những gì làm việc cho tôi. – b85411

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