2015-10-05 5 views
0

Я использую onsen-ui и angularjs для выполнения функции входа в Monaca, на самом деле это хорошо работает, когда я отлаживаю iphone и просматриваю на веб-сайте, но когда Я пытаюсь использовать его в системе Android, я считаю, что файлы cookie не сохраняются. В следующий раз, когда я перейду на страницу входа, то, что я вижу, является страницей приветствия, но в системе Android система попросила меня снова войти в систему. Когда я вхожу в систему, я сохраняю информацию о cookie. Мой код выглядит следующим образом:Использование cookie для сохранения информации для входа в систему, но для платформы Android он не может работать

$scope.login = function(){ 
    $.ajax({ 
     type: 'post', 
     url: 'https://www.xxxxxxx.com/api/public/user_login', 
     data:{ 
      username:document.getElementById('login_username').value, 
      password:document.getElementById('login_password').value 
     }, 
     success: function(data) { 
      if(data.error != "" & data.error != null){ 
       alert(data.error); 
       delCookie('username');     
      }else if(data.status == 0){ 
       setCookie('username',data.username,365); 
       $scope.username = getCookie('username'); 
       document.getElementById('loginInfo').style.display="none"; 
       document.getElementById('welcome').style.display="block"; 
      } 
     }, 
    }); 
}; 
function getCookie(login_name){ 
if (document.cookie.length>0){ 
    login_start=document.cookie.indexOf(login_name + "=") 
    if (login_start!=-1){ 
     login_start=login_start + login_name.length+1; 
     login_end=document.cookie.indexOf(";",login_start); 
     if (login_end==-1){ 
      login_end=document.cookie.length; 
     } 
     return unescape(document.cookie.substring(login_start,login_end)); 
    } 
} 
return ""; 
} 

function setCookie(c_name,value,expiredays){ 
var exdate=new Date(); 
exdate.setDate(exdate.getDate()+expiredays); 
document.cookie=c_name+ "=" +escape(value)+((expiredays==null) ? "" : "; expires="+exdate.toGMTString()); 
} 

function delCookie(name){ 
var exp = new Date(); 
exp.setTime (exp.getTime() - 1); 
var cval = getCookie (name); 
document.cookie = name + "=" + cval + "; expires="+ exp.toGMTString(); 
} 

ответ

0

Вы можете использовать $cookieStore кажется устаревшим теперь, вместо ` '$ печенье является тот, который мы должны использовать.

Вместо использования document.cookie, который является веб-API, используйте угловое встроенное обслуживание для него, у вас не будет проблем с этим в Android и ios.

Вам нужно просто вводить зависимость в контроллере:

как:

angular.module('sampleApp', ['ngCookies']) 
.controller('AuthController', function ($scope, 
             $cookies,//injecting the dependency here 
             $timeout, 
             ngDialog) { 


$scope.login = function(){ 
    $.ajax({ 
     type: 'post', 
     url: 'https://www.xxxxxxx.com/api/public/user_login', 
     data:{ 
      username:document.getElementById('login_username').value, 
      password:document.getElementById('login_password').value 
     }, 
     success: function(data) { 
      if(data.error != "" & data.error != null){ 
       alert(data.error); 
       delCookie('username');     
      }else if(data.status == 0){ 
       setCookie('username',data.username,365); 
       $scope.username = getCookie('username'); 
       document.getElementById('loginInfo').style.display="none"; 
       document.getElementById('welcome').style.display="block"; 
      } 
     }, 
    }); 
}; 
function getCookie(login_name){ 
if (document.cookie.length>0){ 
    login_start= document.cookie.indexOf(login_name + "=") 
    //use $cookies.get(login_name) to get value of the login_name param set in cookie 
    if (login_start!=-1){ 
     login_start=login_start + login_name.length+1; 
     login_end=document.cookie.indexOf(";",login_start); 
     //use $cookies.get(login_name) to get value of the login_name param set in cookie 
     if (login_end==-1){ 
      login_end=document.cookie.length; 
      //use $cookies.get(login_name) to get value of the login_name param set in cookie 
     } 
     return unescape(document.cookie.substring(login_start,login_end)); 
    } 
} 
return ""; 
} 

function setCookie(c_name,value,expiredays){ 
var exdate=new Date(); 
exdate.setDate(exdate.getDate()+expiredays); 
document.cookie=c_name+ "=" +escape(value)+((expiredays==null) ? "" : "; expires="+exdate.toGMTString()); 
//use $cookies.put(key, value) to get value of the login_name param set in cookie 
} 

function delCookie(name){ 
var exp = new Date(); 
exp.setTime (exp.getTime() - 1); 
var cval = getCookie (name); 
document.cookie = name + "=" + cval + "; expires="+ exp.toGMTString(); 
//use $cookies.put(key, value) to get value of the login_name param set in cookie 
} 


} 

Это легко реализовать и использовать, пожалуйста, обратитесь к Angular documentation за то же самое.

+0

Большое спасибо за ваш ответ. После использования файлов cookie $, но также не может сохранять файлы cookie в системе Android. И возникла новая проблема: данные на платформе Android для отображения не определены, но в ios-системе может отображаться. – Miao

+0

Я решаю эту проблему, используя фабрику, чтобы сохранить информацию для входа. Спасибо большое. – Miao

+0

Good Pal ... просто хотел сообщить вам, что вы также можете использовать локальное хранилище, чтобы сохранить данные в браузере/веб-браузере вашего устройства, мы используем то же самое в нашем проекте, ранее мы использовали cookiestore, но там данные не могут храниться дольше с помощью файлов cookie, для этой функции рекомендуется локальное хранилище. – Kailas