phonegap:基于 cookie 的身份验证 (PHP) 不起作用 [webview]
Posted
技术标签:
【中文标题】phonegap:基于 cookie 的身份验证 (PHP) 不起作用 [webview]【英文标题】:phonegap: cookie based authentication (PHP) not working [webview] 【发布时间】:2011-04-12 04:18:34 【问题描述】:我正在开发一个使用 sencha touch、html5 和 phonegap 作为包装器的移动网络应用程序。
我正在使用 php 身份验证 (Cookie) 和 ajax 请求。在 safari 或 chrome 上一切正常,但在使用 phonegap (webview) 部署后,它不再工作了......
任何帮助将不胜感激:)
更多细节:
我的应用程序的所有数据都通过 ajax 请求加载到我的服务器组件“mobile.php”。 我使用基本的 PHP-Auth 来验证用户:
-
AJAX 请求 [用户名、密码] -> mobile.php
-> 会话建立(cookie)
身份验证成功后的所有其他请求
普通的 safari 网站和 webview 有什么区别?
【问题讨论】:
【参考方案1】:我想通了:
您必须更改 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
【讨论】:
非常感谢。自过去 2 小时以来,我一直在尝试调试此问题。 谢谢,这对我也有用。但是你能修复你的代码格式吗?使用“1010101”图标将代码表示为代码。 有人在 android 上尝试过吗? 这似乎不适用于 ios5。根据文档,NSHTTPCookieAcceptPolicyAlways
是默认的 cookie 存储策略。然而,cookie 不会在 jQuery $.getJSON
请求中存储或发送。
@Bringo 我也注意到了这一点【参考方案2】:
如果您的 Phonegap AJAX 请求没有像预期的那样触发回调,这可能是原因。
如果您收到的响应是尝试设置 cookie 而您还没有完成 Michael 的修复,那么您的 (jquery) AJAX 请求将悄然失败——无论是 success: 还是 error: 回调都会触发,尽管服务器实际上收到请求并发送响应。即使您不关心 cookie,您也必须这样做。
我希望这对某人有所帮助。
我并不关心 cookie,只是花了几个小时试图弄清楚为什么回调没有触发!
【讨论】:
【参考方案3】:也有适用于安卓的解决方案:
安装插件https://github.com/wymsee/cordova-HTTP 以执行任意 HTTP(S) 请求。
将XMLHttpRequest
替换为插件替代品(cordovaHTTP.get
或cordovaHTTP.post
):
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"]
,可以解析名称、值、域、路径甚至 HttpOnly 标志;-)
所述cookie可以保存在LocalStorage
中并在后续请求中发送(参见.get
/.post
方法的cordovaHTTP.setHeader()
或header
参数)以在桌面浏览器上模拟经过身份验证的用户。
【讨论】:
【参考方案4】:在我的实时应用中存储获取和删除 cookie 的最佳方式
在 cookie 中存储价值
window.localStorage.setItem("key", "value");
在 cookie 中获取价值
var value = window.localStorage.getItem("key");
删除 cookie 值
window.localStorage.removeItem("key");
window.localStorage.clear();
【讨论】:
澄清一下,localStorage 与 cookie 无关。它只是一种在现代浏览器上存储字符串的机制。它确实是 cookie 的一个很好的替代品,但它肯定不是 cookie 本身。以上是关于phonegap:基于 cookie 的身份验证 (PHP) 不起作用 [webview]的主要内容,如果未能解决你的问题,请参考以下文章