2016-10-15 3 views
0

저는 처음으로 phonegap과 로컬 저장소를 사용하고 있습니다. 그래서, 내가 바보 같은 것을 물으면 사과드립니다.phonegap : 로컬 저장소에 데이터베이스 값을 저장합니다.

모바일 앱 로그인/가입 페이지를 만들려고합니다. html/js/jquery에서 프론트 엔드 페이지를 만들고 백엔드는 PHP에 있습니다.

PHP에서 우리는 세션을 사용하여 일부 데이터를 저장하지만 html에는 세션이 없습니다. 그러나 나는이 값을 저장하기 위해 로컬 스토리지를 사용할 수 있다는 것을 알아야합니다. 다음은 인증에 사용되는 PHP 코드입니다.

<?php 
session_start(); 
header("Access-Control-Allow-Origin: *"); 
header('Content-Type: application/json'); 
require_once('include/db.php'); 
require_once('functions.php'); 
$res=array(); 
$res['errors']=array(); 
if(isset($_POST)) { 
    if(empty($_POST['email'])) { 
     array_push($res['errors'], "Email could not be empty"); 
    } 
    if(empty($_POST['password'])) { 
     array_push($res['errors'], "Password could not be empty"); 
    } 
    if(!empty($_POST['email']) && !isValidEmail($_POST['email'])) { 
     array_push($res['errors'], "Invalid Email Format"); 
    } 

     $email = $_POST['email']; 
     $password = $_POST['password']; 
     $now = date('Y-m-d H:i:s'); 

    if(empty($res['errors'])) { 
     $result = $mysqli->prepare("SELECT uid,pic,fname,last_seen FROM users where email= ? and password = ? and status = '1'"); 
     $result ->bind_param("ss", $email, $password); 
     $result->execute(); 
     $result->store_result(); 

     $result->bind_result($uid, $pic, $fname, $last_seen); 
     if($result->num_rows == 1){ 

      while ($result->fetch()) { 
         $_SESSION['uid'] = $uid; 
         $_SESSION['pic'] = $pic; 
         $_SESSION['name'] = $fname; 
         $_SESSION['last_login'] = $last_seen; 
      } 

      $res['success'] = true; 
     } 
     else{ 
      array_push($res['errors'], 'Invalid login details'); 
      $res['success'] = false; 

     } 
    }else{ 
     $res['success'] = false;   
    } 
    session_write_close(); 
    echo json_encode($res); 
} 
?> 

여기는 아약스 코드입니다.

<script type="text/javascript"> 
$('document').ready(function() 
{ 
      $("#login").on("submit", function(e) {    
       e.preventDefault; 
       var btn = $('#btn-login'); 
       btn.button('loading'); 
       $.ajax({ 
        type: 'post', 
        url: 'loginexec.php', 
        cache: false, 
        dataType: 'json', 
        data: $('form#login').serialize(), 
        beforeSend: function() { 
         $("#validation-errors").hide().empty(); 
        }, 
        success: function(data) { 
         if(data.success == false) 
          { 
           var arr = data.errors; 
           $.each(arr, function(index, value) 
           { 
            if (value.length != 0) 
            { 
             $("#validation-errors").append('<div class="alert alert-danger"><strong>'+ value +'</strong><div>'); 
            } 
           }); 
           $("#validation-errors").show(); 
           btn.button('reset');        
          } else { 
           localStorage.login="true"; 
           localStorage.email=email; 
           localStorage.id=id; 

           window.location.href = 'user_profile.php'; 
          } 
        }, 
        error: function(xhr, textStatus, thrownError) { 
         alert('Something went to wrong.Please Try again later...'); 
         btn.button('reset'); 
        } 
       });    
       return false; 
      }); 
     }); 

    </script> 

이러한 값을 로컬 저장소에 저장하려고하지만 그 방법을 모르겠다.

$uid; 
$pic; 
$fname; 
$last_seen; 

알려 주시기 바랍니다.

내가 볼 여기
+0

정확히 아약스로 돌아 오니? $ uid의 값입니까? $ pic; $ fname; $ last_seen; 그 귀환에서? 나는'$ res' 배열에 그 값들을 추가하는 것을 보지 못합니다. – DelightedD0D

답변

1

첫 번째 실수는 localStorage의 사용이 잘못이다 : 그것은 그러나 window.localStorage.getItem("login");

를 사용 window.localStorage.setItem("login",1); 보다는

액세스 할 수 localStorage.login ="true";보다

사용, 내 의견으로는 그것도하지 않습니다 좋은 아이디어는 다른 악의적 인 앱이 모든 localStorage 값에 액세스 할 수 있기 때문에 localStorage에 세션과 같은 것을 저장하고 (심지어 전자 메일 주소도 아님), 각 PA에서 단일 아약스 요청을하는 것이 좋습니다. 먼저 유효한 세션이 설정되었는지 확인하고 로그인으로 리디렉션되지 않았는지 확인하십시오. 이 경우에도 last_seen 시간을 저장할 필요가 없으며 세션과 좋은 인증은 항상 서버 측에서 수행해야합니다.

+0

답해 주셔서 감사합니다. 나는 그것을 내 마음 속에 간직 할 것이다. – Ironic

0

향후 사용을 위해 값을 저장하기 위해 로컬 저장소를 사용합니다. 키를 기반으로 값을 덮어 쓸 수 있습니다. 다음은 store 값에 대한 예제입니다. localStorage.setItem ("login", 1); 검색의 경우 로그인 사용 값 localStorage.getItem ("login"); 로그인 키를 제거하려면 localStorage.removeItem ("login");

감사 ...