【问题标题】:Cookies wont persist after phonegap app is closedphonegap 应用程序关闭后 Cookie 不会持续存在
【发布时间】:2014-05-07 22:40:31
【问题描述】:

我在 Android 上使用 python-django 作为后端的 phonegapp 应用程序有一点问题。当我关闭应用程序时,我丢失了服务器在身份验证后设置的所有 cookie(sessionid 和 csrftoken)。 因此,每次我打开应用程序时,我都必须执行登录程序。我尝试将 sessionid 保存在 localStorage 中,然后创建自己的标头,但 XMLHttpRequest 规范不允许这样做。我需要一个简单的锻炼来做这样的事情:

function get_csrf_token(){
  $.ajax({
    url:"http://www.mywebsite.com/token",
    type:"GET",
    dataType:"text",
    beforeSend: function(request) {
      request.setRequestHeader("Cookie", 'sessionid=' + window.localStorage["sessid"]);
    },

    error: function(XMLHttpRequest, textStatus, errorThrown) {
      alert(JSON.stringify(XMLHttpRequest));
      alert(JSON.stringify(textStatus));
      alert(JSON.stringify(errorThrown));
    },
    success: function (token) {
      window.localStorage["token"] = token;
      return token;
    }
  });
}

这是否可以通过 phonegap 实现,或者我每次启动应用程序时都必须登录?

【问题讨论】:

    标签: android django cordova cookies phonegap-build


    【解决方案1】:

    在处理移动设备时,您真的应该使用不同的身份验证方法。尝试基于令牌的身份验证要容易得多。本质上,您的移动应用程序上有一个表单,该表单获取他们的用户名/密码并将其传递给您设计的确保有效性的视图,然后使用应用程序可以包含在所有后续调用中的令牌进行响应。

    您可以使用自定义身份验证后端在 Django 中轻松实现此功能,或者您可以使用内置的 Django Rest Framework http://www.django-rest-framework.org/api-guide/authentication#tokenauthentication

    【讨论】:

      【解决方案2】:

      你所做的绝对是可能的。在 XMLHttpRequest 对象上设置 cookie 是不可能的。但如果你先使用document.cookie 设置cookie,它将在每个后续请求的cookie 标头上发送。

      function get_csrf_token(){
        document.cookie = 'sessionid=' + window.localStorage["sessid"];
        $.ajax({
          url:"http://www.mywebsite.com/token",
          type:"GET",
          dataType:"text",
        ...
        });
      }
      

      在执行此操作时,您唯一需要注意的是 XSS 攻击的可能性。通过将 session id 存储在 localstorage 中,如果您的应用程序存在 XSS 漏洞,攻击者可能会获取 localstorage session id 并使用 JSONP 或图像标签等将其发送到他们的服务器。由于您使用的是 phonegap,您可以缓解这个问题通过使用whitelist policy 只允许请求转到您的已知服务器。

      【讨论】:

        猜你喜欢
        • 2012-08-31
        • 1970-01-01
        • 1970-01-01
        • 2012-03-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-02-14
        相关资源
        最近更新 更多