2011-08-22 139 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