关闭phonegap应用后,Cookie不会持续存在

时间:2014-05-07 22:40:31

标签: android django cordova cookies phonegap-build

我的Android上的phonegapp应用程序有一点问题,python-django作为后端。当我关闭应用程序时,我丢失了服务器在身份验证后设置的所有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或我每次启动应用程序时都必须登录吗?

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

你正在做的事情肯定是可能的。在XMLHttpRequest对象上设置cookie是不可能的。但是,如果您首先使用document.cookie设置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攻击的可能性。通过将会话ID存储在localstorage中,如果您的应用程序有XSS漏洞,攻击者可能会获取localstorage会话ID并使用JSONP或图像标记等将其发送到服务器。由于您使用的是phonegap,因此可以缓解使用whitelist policy只会允许请求转到已知服务器的问题。