phonegap:基于cookie的身份验证(PHP)无法正常工作[webview]

时间:2010-09-14 13:29:54

标签: ajax cookies ios webview cordova

我正在开发一个使用sencha touch,HTML5和phonegap作为包装的移动网络应用。

我正在使用PHP身份验证(Cookie)和ajax请求。在safari或chrome上一切正常,但在使用phonegap(webview)进行部署后,它不再起作用了......

任何帮助将不胜感激:)

更多细节:

我的应用的所有数据都是通过ajax请求加载到我的服务器组件“mobile.php”。 我使用基本的PHP-Auth来验证用户:

  1. AJAX-Request [用户名,密码] - > mobile.php - >会话建立(cookie)
  2. auth成功时的所有其他请求
  3. 普通的野生动物园网站和网页浏览有什么区别?

4 个答案:

答案 0 :(得分:27)

我明白了:

您必须更改phonegap_delegate.m文件并将以下内容添加到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];
}

它使webview能够接受来自ajax请求的cookie

答案 1 :(得分:2)

如果您的Phonegap AJAX请求没有像他们应该那样触发回调,这可能是原因。

如果您尝试设置Cookie并且您没有完成Michael的修复,那么您的(jquery)AJAX请求将会安静地失败 - 既不成功也不会出错:尽管服务器确实存在,但回调将会触发收到请求并发送了回复。即使您不关心cookie,也必须这样做。

我希望这有助于某人。

我不关心cookies,但花了几个小时试图弄清楚为什么回调没有开火!

答案 2 :(得分:0)

有一个适用于Android的解决方案:

安装插件https://github.com/wymsee/cordova-HTTP以执行任意HTTP(S)请求。

get()替换为插件备选方案(nameXMLHttpRequest):

cordovaHTTP.get

响应将包含状态,数据和cordovaHTTP.post,可以解析名称,值,域,路径甚至是HttpOnly标志; - )

所述Cookie可以保存在cordovaHTTP.post("https://example.com/login", {email: 'xyz@example.com', passwd: "s3cr3t"}, {}, function(response) { console.log('success'); console.log(response); }, function(response) { console.log('failure'); console.log(response); }); 中并在后续请求中发送(请参阅response.headers["Set-Cookie"] / LocalStorage方法的cordovaHTTP.setHeader()header参数)以模拟桌面浏览器上经过身份验证的用户。

答案 3 :(得分:-6)

存储获取和删除Cookie的最佳方法是在我的应用中正常运行

在cookie中存储值

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

获取cookie中的值

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

删除Cookie值

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