我正在开发一个使用服务器会话的PhoneGap应用程序。它需要cookie来处理会话。此外,还应该处理来自负载均衡器的cookie。所以没有别的办法了。如何在PhoneGap应用程序中处理Cookie?
我已经完成了一些研究:
cookie有些人说cookie处理可能取决于服务器没有为未知用户代理(IIS)设置cookie:PhoneGap session (cookies) on iOS
发布于 2013-05-15 20:23:42
朋友,我也尝试过在phonegap中使用cookies,但没有成功。解决方案是使用localStorage。
关键快速示例:
var keyName = window.localStorage.key(0);设置项目快速示例:
window.localStorage.setItem("key", "value");获取项目快速示例
var value = window.localStorage.getItem("key");
// value is now equal to "value"删除项目快速示例:
window.localStorage.removeItem("key");清除快速示例:
window.localStorage.clear();如果您将javascript用于移动和web,则可以使用以下代码来检测环境:
var wl = window.location.href;
var mob = (wl.indexOf("android")>0);参考资料:http://docs.phonegap.com/en/1.2.0/phonegap_storage_storage.md.html#localStorage http://cordova.apache.org/docs/en/6.x/cordova/storage/storage.html#page-toc-source
请注意:在iOS上使用匿名导航可能会使本地存储不像spected那样工作。一个对我来说运行良好的简单测试:
$(document).ready(function () {
try {
localStorage.setItem('test', '1');
} catch (Err) {
if (Err.message.indexOf('QuotaExceededError') > -1) {
// Tell the user they are in anonymous mode
// Sugest it to go to https://support.apple.com/pt-br/HT203036 to get help to disable it
}
}
}
});发布于 2015-12-07 18:53:54
与您类似,我希望在我的应用程序中使用由服务器设置的cookie,以便我的应用程序与web保持一致,而不需要单独的device-ID或其他方法进行身份验证。
我发现了以下几点:
通过AJAX设置的
$.get()或$.post()) do not persist因此,让cookie持久化的方法是使用inAppBrowser插件。
首先,设置一个简单的服务器,它接受您想要持久化的key-value参数作为GET参数。我喜欢python/tornado,所以我的服务器可能看起来像这样:
class PersistCookieHandler(tornado.web.RequestHandler):
@tornado.gen.coroutine
def get(self):
token = self.get_argument('token')
self.set_secure_cookie('token',token)然后,在你的应用程序中:
function persistToken(token,success_cb, error_cb) {
// replace with your URL
url = 'SECURE_SERVER_URL_THAT_HANDLES_SET_COOKIE';
// _blank tells inAppBrowser to load in background (e.g., invisible)
var ref = window.open(url, '_blank', 'location=no,toolbar=no');
// attach a listener to the window which closes it when complete
ref.addEventListener('loadstop', function(event) {
ref.close();
success_cb(); // call our success callback
});
// attach a listener for server errors
ref.addEventListener('loaderror', function(event) {
// call our error callback
error_cb(event);
});
}然后,您可以按如下方式调用它:
persistToken(
someToken,
function() {
console.log("token persisted");
},
function() {
console.log("something went wrong);
}
);发布于 2014-08-25 00:55:38
使用device_id寻址服务器端的某些记录。在您的服务器上创建一个名为session的数据库表,将device_id、cookiename、cookievalue和timestamp作为列。
当客户通过phonegap应用程序访问您的web服务器时,获取他的device_id并将cookie存储在您的表中。在OAuth协议中,device_id here充当接入令牌。
现在出于安全原因,您需要缩短这些记录的有效期,因为device_id是永久存在的,并且您的客户有一天会想要出售他们的手机。因此,使用timestamp存储客户端的最后一次访问,如果记录有10天未被访问,则将其删除。
https://stackoverflow.com/questions/15349237
复制相似问题