2010-09-14 26 views
27

Tôi đang làm việc trên ứng dụng web dành cho thiết bị di động sử dụng sencha touch, HTML5 và phonegap làm trình bao bọc.phonegap: xác thực dựa trên cookie (PHP) không hoạt động [webview]

Tôi đang sử dụng Xác thực PHP (Cookie) và yêu cầu ajax. Tất cả mọi thứ hoạt động tốt trên safari hoặc chrome, nhưng sau khi triển khai với PhoneGap (webview) nó does't làm việc nữa ...

Bất kỳ trợ giúp sẽ được đánh giá cao :)

Một số chi tiết:

Tất cả dữ liệu cho ứng dụng của tôi được tải thông qua yêu cầu ajax đến thành phần máy chủ của tôi "mobile.php". tôi sử dụng cơ bản PHP-Auth để autenticate người dùng:

  1. AJAX-Request [username, mật khẩu] -> mobile.php -> phiên thành lập (cookie)
  2. Tất cả các yêu cầu khác nếu auth đã thành công

Sự khác biệt giữa trang web safari bình thường và chế độ xem web là gì?

Trả lời

27

tôi figured it out:

bạn phải thay đổi các tập tin phonegap_delegate.m và thêm dòng sau vào phương pháp init:


- (id) init 
{ 
    /** If you need to do any extra app-specific initialization, you can do it here 
    * -jm 
    **/ 
    //special setting to accept cookies via ajax-request 
    NSHTTPCookieStorage *cookieStorage = [NSHTTPCookieStorage 
              sharedHTTPCookieStorage]; 
    [cookieStorage setCookieAcceptPolicy:NSHTTPCookieAcceptPolicyAlways]; 

    return [super init]; 
} 

nó cho phép webview chấp nhận cookie từ yêu cầu ajax

+0

Cảm ơn rất nhiều. Tôi đã cố gắng gỡ lỗi vấn đề này kể từ 2 giờ qua. –

+0

Tôi vừa mới đốt cháy cả ngày. Bài đăng của bạn đã lưu tôi. Cảm ơn bạn!!! –

+0

cảm ơn bạn, cũng đã làm việc cho tôi. Nhưng có thể yo ufix lên định dạng mã của bạn? Sử dụng biểu tượng "1010101" để biểu thị mã là mã. – John

2

Nếu các yêu cầu AJAX Phonegap của bạn không kích hoạt các cuộc gọi lại như chúng được cho là, đây có thể là lý do.

Nếu phản hồi bạn đang cố gắng đặt cookie và bạn chưa thực hiện sửa lỗi của Michael thì yêu cầu AJAX (jquery) của bạn sẽ không thành công - không thành công: cũng không phải lỗi: cuộc gọi lại sẽ kích hoạt bất chấp thực tế là máy chủ thực sự đã nhận được yêu cầu và gửi phản hồi. Có vẻ như bạn phải làm điều này ngay cả khi bạn không quan tâm đến các cookie.

Tôi hy vọng điều này sẽ giúp ai đó.

Tôi không quan tâm đến cookie nhưng chỉ mất vài giờ để tìm hiểu lý do tại sao cuộc gọi lại không kích hoạt!

+0

Tốt điểm lại: gọi lại. +1 –

-6

Cách tốt nhất để lưu trữ được và xoá cookie làm việc tốt của mình trong ứng dụng của tôi mà là trên sống

Để giá trị lưu trữ trong cookie

window.localStorage.setItem("key", "value"); 

Để Nhận giá trị trong cookie

var value = window.localStorage.getItem("key"); 

Để xóa giá trị cookie

window.localStorage.removeItem("key"); 
window.localStorage.clear(); 
+6

Để làm rõ, localStorage không liên quan gì đến cookie. Nó chỉ đơn thuần là một cơ chế để lưu trữ các chuỗi trên các trình duyệt hiện đại. Nó hoạt động như một sự thay đổi lớn cho các cookie, nhưng chắc chắn nó không phải là một cookie. – sic1

0

Có một giải pháp hoạt động trên android quá:

Cài đặt plugin https://github.com/wymsee/cordova-HTTP để thực hiện các yêu cầu HTTP tùy ý.

Thay XMLHttpRequest với thay thế plugin (cordovaHTTP.get hoặc cordovaHTTP.post):

cordovaHTTP.post("https://example.com/login", {email: '[email protected]', passwd: "s3cr3t"}, {}, function(response) { 
    console.log('success'); 
    console.log(response); 
}, function(response) { 
    console.log('failure'); 
    console.log(response); 
}); 

Câu trả lời sẽ chứa trạng thái, dữ liệu và response.headers["Set-Cookie"], có thể được phân tích cú pháp cho tên, giá trị, tên miền, đường dẫn và thậm chí cờ HttpOnly; -)

nói Cookie có thể được lưu trong LocalStorage và gửi yêu cầu tiếp theo (xem cordovaHTTP.setHeader() hoặc header tham số của .get/.post phương pháp) để mô phỏng một người dùng xác thực trên quảng cáo trình duyệt esktop.

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