2012-06-19 1 views
1

JQuery로 작성된 모바일 애플리케이션 용 세션을 만드는 데 어려움이 있습니다. 내 응용 프로그램이 사용자 세션이 있는지 여부를 확인하고 그렇지 않으면 로그인 양식으로 사용자를 리디렉션해야합니다. 아약스를 사용하여 로그인 자격 증명을 확인하고 사용자 세부 정보가 JSON 형식으로 반환됩니다.jquery mobile app - PHP 세션에 로그인하고 저장하는 방법

내 앱에서 이러한 JSON 변수를 세션에 저장할 수 있도록하려면 어떻게해야합니까?

function ajaxPost(LoadUrl, redirect) { 
    jQuery.ajax({ 
     type: "POST", 
     url: LoadUrl, 
      data: "email=" + $("#email").val() + "&pw=" + $("#pw").val(), 
      complete: function(xhr, statusText){ 
       if (xhr.status == 401){  
        alert('Unauthorised'); 
       } 
     } , 

     success:function(response){ 
       if(redirect != null){ 
        alert(response); 
        <? 
        //session_start(); 
        //$_SESSION['user'] = $response; // this is JSON: {"id":"45454","name":"Joe Blog","username":"joebloguser"} 
        ?> 
        app.navigate(redirect); 

       } 
      } 
    });     
} 

나는 그러므로 나는 분명히 원하지 않는 $ _SESSION 세트, 항상있다,이 아약스 호출이되는지 여부 세션을 시작하는 것으로 PHP 세션을 시작하는 PHP 코드를 주석 한 . 누구든지 이걸 진행하는 가장 좋은 방법에 대해 조언 할 수 있습니까?

+0

요청이 완료 될 때까지 코드를 차단하려면 $ .ajax에 async : false를 전달해야합니다. – Burimi

답변

1

php를 자바 스크립트 사이에 넣으면 페이지가 처음로드 될 때 (자바 스크립트가 실행되기 전에 ...) 작동하므로 작동하지 않습니다.

세션 로직을 loadUrl 스크립트로 이동해야합니다. 필요한 경우 로그인을 확인하고 세션을 시작하십시오.

1

이 문제를

한 가지 방법이 될 것이다 (문제가 포함 된 JS 스크립트와 서버 측에있는 PHP 데이터 사이의 즉각적인 통신 인)에 접근하는 몇 가지 방법이 있습니다에 단순히 JSON 문자열을 에코 숨겨진 요소가 세션에 있으면이를 jquery를 사용하여 객체 리터럴로 가져 와서 파싱합니다.

PHP :

<?php 
if(isset($_SESSION['some_var'])) { 
?> 
<div id="#jsondata"> 
<?php echo json_encode($_SESSION['some_var']); ?> 
</div> 

JS

PHP 브라우저에 출력 (outputting) 끝나면
var jsonData = JSON.parse($('#jsondata').html()); 

은 PHP이 데이터를 즉시 출력으로 이동되므로, 이는 상기 DOM에 렌더링되며 JQuery와 불 , 그것은 읽힐 선물이 될 것입니다. 분명히 이것은 소스 코드에서 데이터 구조를 노출하므로이 접근법을 사용할 때 고려해야 할 사항입니다.

다른 사용자 데이터를 출력하는 PHP 끝점을 갖는 것이 존재하는 경우, 거기에는 사용자 세션없고, JS가 출력값 기초한 경험 안내 있다면 JSON 및 오류 값 mimetyped :

PHP :

//in some accessible url 
<?php 
if(isset($_SESSION['some_var'])){ 
    $data = array('flag'=>1,'obj'=>$_SESSION['some_var']); 
}else{ 
    $data = array('flag'=>0); 
} 
header('Content-type:application/json'); 
echo json_encode($data); 

당신은 당신의 주어진 예에서와 같이 페이지로드에서 이것에 대한 아약스와 리디렉션에 대한 플래그 값을 확인할 수 있습니다.

일반적으로 문제에 대한 보편적 인 접근 방식을 사용하여 이런 종류의 설계를 염두에 두어야합니다. 일반적으로 두드러진 페이지간에 보편적으로 복제해야하기 때문입니다. 클라이언트 측에서 authetication을 실제로 검사해야합니까, 아니면 서버 측 코드 (아마도 선택적으로 javascript/템플릿 파일을 포함하여)에 의해 조작 된 인증을위한 포크를 가질 수 있습니까? 여러분의 목적에 보편적으로 적용 가능한 것을 생각하는 것이 가장 좋습니다 .

관련 문제