Используйте cookie, чтобы сохранить информацию для входа в систему, но для платформы Android это не может работать

0

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

$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();
}
Теги:
cookies
onsen-ui
monaca

1 ответ

0
Лучший ответ

Вы можете использовать $cookieStore который теперь кажется устаревшим, вместо этого '$ cookie - это тот, который нам нужно использовать.

Вместо использования 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
}


}

Его легко внедрить и использовать, пожалуйста, обратитесь к документации по угловым устройствам.

  • 0
    Большое спасибо за ваш ответ. После того как я использую $ cookies, но он также не может сохранить куки в системе Android. И возникла новая проблема: данные на платформе Android для показа не определены, но в системе ios можно отображать.
  • 0
    Я решаю эту проблему с помощью фабрики, чтобы сохранить информацию для входа в систему. Большое спасибо.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню