首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在PhoneGap/Cordova中处理cookies

在PhoneGap/Cordova中处理cookies
EN

Stack Overflow用户
提问于 2013-03-12 05:41:52
回答 9查看 79.5K关注 0票数 93

我正在开发一个使用服务器会话的PhoneGap应用程序。它需要cookie来处理会话。此外,还应该处理来自负载均衡器的cookie。所以没有别的办法了。如何在PhoneGap应用程序中处理Cookie?

我已经完成了一些研究:

cookie有些人说cookie处理可能取决于服务器没有为未知用户代理(IIS)设置cookie:PhoneGap session (cookies) on iOS

  • In
  • 可以用document.cookie = ...设置,但它们不会保存在PhoneGap中并且会丢失。在触发xhr请求之前,可以使用xhr.getResponseHeader('Set-Cookie')在xhr请求之后检索
  • Cookie。但仅当在服务器上实际设置时。不幸的是,(xhr)requests.
  • Some去掉了"Cookie“头。在jQuery建议localStorage保存会话it等之后,JavaScript document.cookie属性没有被分配和更新。但是所有的脚本都可以访问它,这可能是localStorage的安全问题。cookies通过使用httponly标志解决此问题。
  • iOS:有一些修改将更改webView行为以支持Cookies。但它们似乎不适用于iOS 6和PhoneGap 2.5:https://groups.google.com/forum/?fromgroups=#!topic/phonegap/ZJE1nxX63ow
  • Cookies似乎在AppDelegate.m (v2.5)中默认启用。
EN

回答 9

Stack Overflow用户

发布于 2013-05-15 20:23:42

朋友,我也尝试过在phonegap中使用cookies,但没有成功。解决方案是使用localStorage。

关键快速示例:

代码语言:javascript
复制
 var keyName = window.localStorage.key(0);

设置项目快速示例:

代码语言:javascript
复制
 window.localStorage.setItem("key", "value");

获取项目快速示例

代码语言:javascript
复制
 var value = window.localStorage.getItem("key");
 // value is now equal to "value"

删除项目快速示例:

代码语言:javascript
复制
 window.localStorage.removeItem("key");

清除快速示例:

代码语言:javascript
复制
 window.localStorage.clear();

如果您将javascript用于移动和web,则可以使用以下代码来检测环境:

代码语言:javascript
复制
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那样工作。一个对我来说运行良好的简单测试:

代码语言:javascript
复制
$(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
            }
        }
    }
});
票数 69
EN

Stack Overflow用户

发布于 2015-12-07 18:53:54

与您类似,我希望在我的应用程序中使用由服务器设置的cookie,以便我的应用程序与web保持一致,而不需要单独的device-ID或其他方法进行身份验证。

我发现了以下几点:

通过AJAX设置的

  • Cookie(例如,jQuery $.get()$.post()) do not persist
  • Cookies set in an 'inAppBrowser‘do persist。

因此,让cookie持久化的方法是使用inAppBrowser插件。

首先,设置一个简单的服务器,它接受您想要持久化的key-value参数作为GET参数。我喜欢python/tornado,所以我的服务器可能看起来像这样:

代码语言:javascript
复制
class PersistCookieHandler(tornado.web.RequestHandler):
   @tornado.gen.coroutine
   def get(self):
      token = self.get_argument('token')
      self.set_secure_cookie('token',token)

然后,在你的应用程序中:

代码语言:javascript
复制
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);    
    });
}

然后,您可以按如下方式调用它:

代码语言:javascript
复制
persistToken(
   someToken,
   function() {
       console.log("token persisted");
   },
   function() {
       console.log("something went wrong);
   }
);
票数 6
EN

Stack Overflow用户

发布于 2014-08-25 00:55:38

使用device_id寻址服务器端的某些记录。在您的服务器上创建一个名为session的数据库表,将device_idcookienamecookievaluetimestamp作为列。

当客户通过phonegap应用程序访问您的web服务器时,获取他的device_id并将cookie存储在您的表中。在OAuth协议中,device_id here充当接入令牌。

现在出于安全原因,您需要缩短这些记录的有效期,因为device_id是永久存在的,并且您的客户有一天会想要出售他们的手机。因此,使用timestamp存储客户端的最后一次访问,如果记录有10天未被访问,则将其删除。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15349237

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档