我正在开发一个使用sencha touch,HTML5和phonegap作为包装的移动网络应用。
我正在使用PHP身份验证(Cookie)和ajax请求。在safari或chrome上一切正常,但在使用phonegap(webview)进行部署后,它不再起作用了......
任何帮助将不胜感激:)
更多细节:
我的应用的所有数据都是通过ajax请求加载到我的服务器组件“mobile.php”。 我使用基本的PHP-Auth来验证用户:
普通的野生动物园网站和网页浏览有什么区别?
答案 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()
替换为插件备选方案(name
或XMLHttpRequest
):
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();