2012-06-19 23 views
1

我很難創建用JQuery編寫的移動應用程序的會話。我希望我的應用程序檢查用戶會話是否存在,如果不存在,它會將用戶重定向到登錄表單。我使用ajax檢查登錄憑據,並且用JSON格式返回用戶詳細信息。jquery移動應用程序 - 如何登錄和存儲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); 

       } 
      } 
    });     
} 

我註釋掉啓動PHP會話,因爲這似乎啓動會話Ajax調用是否是由PHP代碼,因此總有一個$ _SESSION集,我顯然不希望。任何人都可以建議採取這種方式的最佳方式?

+0

您需要在$ .ajax處傳遞async:false以阻止代碼,直到請求完成。 – Burimi

回答

1

如果你把php放在你的javascript之間,它會在頁面第一次加載的時候運行(在任何javascript運行之前...),所以這是行不通的。

您需要將會話邏輯移至loadUrl腳本;驗證那裏的登錄並在必要時啓動會話。

1

有接近此問題(該問題是一個嵌入式JS腳本和駐留在服務器側的PHP數據之間的直接通信)

一種方法是一些方法來簡單地echo JSON字符串如果它存在於會話中,則轉換爲隱藏元素,然後使用jquery將其提取並解析爲對象文本(如果存在)。

PHP:

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

JS

var jsonData = JSON.parse($('#jsondata').html()); 

由於PHP該數據立即去輸出,它會被渲染成DOM當PHP完outputing到瀏覽器,而當JQuery的火災,它會出現在閱讀。很顯然,這會在源代碼中公開你的數據結構,所以在使用這種方法時需要考慮這些。

另一個辦法是有一個PHP端點輸出用戶數據(如果存在)mimetyped爲JSON和故障值,如果沒有用戶會話,並具有JS引導基於所述輸出值的經驗:

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); 

然後,您可以只是在你給出的例子中爲阿賈克斯在本頁面加載等,並檢查您的重定向標誌值。

您通常需要用一種通用的方法來設計這些類型的事物,因爲它需要在各個authed頁面上進行通用複製。你是否真的需要在客戶端檢查身份驗證,或者你可以讓服務器端代碼操作身份驗證叉(也許通過選擇性地包含javascript /模板文件)。最好考慮一下適用於你的目的的通用方法。