2011-08-22 140 views
0

我無法讓jQuery ajax識別會話。我正在從登錄腳本創建一個php會話,但是發生的事情是,當ajax加載經過身份驗證的頁面時,會話始終未設置。例如,在安全頁面中,如果我刷新頁面,則會話ID每次都會更改。我有session_start();在每一頁。有人能告訴我正確的方式來處理與Ajax和PHP會話嗎?我花了2天時間,並且非常喜歡google,我可能會邀請到聖誕午餐:-)我已經包含了相關的代碼,並且會很感激任何幫助。謝謝返回php會話到ajax

PS。如果它有什麼不同,我正在嘗試使用jquery mobile開發移動應用程序。

登錄HTML JS

$(function() { 
    $("#kt_login1").click(function() { 
     var user = $('#user').val(); 
     var pass = $('#pass').val(); 
     if (user == '') { 
      $("#login_message").html('This field cannot be empty') 
      $('label[for=user]').addClass("label") 
      return false; 
     } 
     else if (pass == '') { 
      $("#login_message").html('This field cannot be empty') 
      $('label[for=pass]').addClass("label") 
      return false; 
     } 
     else $('label[for=user]').removeClass("label"); 
     $('label[for=pass]').removeClass("label"); 

     //alert(user + pass + ok); 
     data = 'user=' + user + '&pass=' + pass; 
     $.ajax({ 
      type: "POST", 
      url: "testajax.php", 
      cache: false, 
      data: data, 
      success: function(data) { 
       if (data == 'authenticated') { 
        //alert(user); 
        document.location = 'secure.php'; 
       } 
       else $('#login_message').html('You are not authorised'); 

       //$(ok).val('Logged In'); 
       //$("#login").get(0).reset(); 
       //$("#form").dialog('close'); 
      }, 
      error: function(xhr, ajaxOptions, thrownError) { 
       jAlert('There was an exception thrown somewhere'); 
       alert(xhr.status); 
       alert(thrownError); 
      } 
     }); 
     return false; 
    }); 
}); 

testajax.php

<?php 

// test wether the user session is already set 
$username = mysql_real_escape_string($_POST['user']); 
$pass = mysql_real_escape_string(md5($_POST['pass'])); 

mysql_connect('localhost', 'root', ''); 
mysql_select_db('sample'); 

//now validating the username and password 
$sql="SELECT * FROM user_usr WHERE username_usr='$username' and password_usr='$pass'"; 
$result=mysql_query($sql); 
$row=mysql_fetch_array($result); 

//if username exists 
if(mysql_num_rows($result)>0) { 
    session_start(); 
    $_SESSION['u_name']=$row['name_usr']; 
    /* 
    echo '<pre>'; 
    print_r($_SESSION['u_name']); 
    print_r($_REQUEST); 

    echo '</pre>'; 
    exit; 
    */ 
    echo 'authenticated'; 
} 
else 
{ 
    echo 'Unknown User'; 
} 
?> 

+++++ SOLUTION從提交按鈕和瞧+++++

更改的形式輸入。一切ok

回答

2

你必須調用session_start()每次用會話的工作(不只是創建時)

見:http://php.net/manual/en/function.session-start.php

+0

擋泥板,我只是更新了我的問題,說我已經包括在每一頁上。謝謝 – bollo

+0

@bollo:我看不出任何改變。你必須使用會話在每個頁面上調用它,不管你是創建會話還是使用現有的會話 – Fender

-1

有此可能出現這種情況原因整個負載 - 但你'代碼是顛倒的!這可能是原因(或促成因素)。

您不應該將會話的存在作爲身份驗證的證據(會話的內容完全是另一回事)。在腳本的頂部調用session_start() - 無條件,中途。

至於爲什麼您的會議數據不可用......這裏是一個常見問題解答 - 查看一些以前的可能原因/如何調查的答案。

+0

symcbean可以請你解釋'顛倒' – bollo

+0

symcbean你的答案與巧克力茶壺一樣有用。你怎麼才能發表評論,如「顛倒」與量化評論? – bollo

+0

沒有量化答案 - >錯字 – bollo