phonegap:基于cookie的身份validation(PHP)不能正常工作
我正在使用sencha touch,HTML5和phonegap作为包装的移动networking应用程序。
我正在使用PHP身份validation(Cookie)和ajax请求。 一切工作正常safari或铬,但部署后phonegap(web视图)它不再工作了…
任何帮助,将不胜感激 :)
一些更多细节:
我的应用程序的所有数据都通过ajax请求加载到我的服务器组件“mobile.php”。 我使用基本的PHP-Auth来validation用户:
- AJAX-Request [用户名,密码] – > mobile.php – >build立会话(cookie)
- 所有其他请求,如果auth成功
一个普通的Safari浏览器网站和webview有什么区别?
我想到了:
您必须更改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
如果你的Phonegap AJAX请求不是像他们应该发射callback,这可能是原因。
如果您收到的响应尝试设置cookie,而您没有完成Michael的修复,那么您的(jQuery)AJAX请求将悄然失败 – 既不成功也不会错误:尽pipe服务器实际收到请求并发出回应。 即使你不关心cookie,你也必须这样做。
我希望这可以帮助别人。
我不在乎cookies,只是花了几个小时试图找出为什么callback不起火!
有一个解决scheme也可以在android上运行:
安装插件https://github.com/wymsee/cordova-HTTP来执行任意的HTTP(S)请求。
用插件替代( cordovaHTTP.get
或者cordovaHTTP.post
)replaceXMLHttpRequest
:
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"]
,可以parsing名称,值,域,path甚至HttpOnly标志;-)
所述cookie可以保存在LocalStorage
并在随后的请求(参见.get
/ .post
方法的cordovaHTTP.setHeader()
或header
参数)中发送,以在桌面浏览器上模拟经过身份validation的用户。
存储获取和删除Cookie的最佳方法是在我的应用程序中正常工作
在cookie中存储价值
window.localStorage.setItem("key", "value");
在cookie中获取价值
var value = window.localStorage.getItem("key");
删除cookie值
window.localStorage.removeItem("key"); window.localStorage.clear();