2011-08-22 6 views
0

jQuery 아약스가 세션을 인식하는 데 문제가 있습니다. 로그인 스크립트에서 PHP 세션을 만들지 만, Ajax가 인증 된 페이지를로드하면 세션은 항상 설정 해제됩니다. 예를 들어 보안 페이지에서 페이지를 새로 고침하면 매번 세션 ID가 변경됩니다. 나는 session_start(); 각 페이지에. 누군가가 나를 아약스와 PHP 세션을 처리하는 올바른 방법을 보여주십시오 수 있습니까? 나는 2 일을 보냈고 Google을 너무 많이 사용했다. 아마 거기에 크리스마스 점심을 초대 할 것이다 :-) 나는 관련 코드를 포함 시켰고 어떤 도움에 대해서도 감사 할 것이다. 감사합니다아약스로 PHP 세션을 반환 중

추신. 차이가 있다면 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. 모든 확인

답변

2

당신은 (그것을 만들 때뿐만 아니라)마다 세션 작업 session_start() 전화를해야

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

+0

펜더, 나는 각 페이지에 포함되었다고 말할 수 있도록 제 질문을 업데이트했습니다. 고마워요 – bollo

+0

@ 볼보 : 나는 변화를 볼 수 없습니다. 당신은 세션을 사용하여 각 페이지에서 전화해야합니다. 세션을 만들거나 기존의 것을 사용 하든지 상관없이 – Fender

-1

이이 경우에있을 이유의 전체 부하가 있습니다 -하지만 당신 코드가 거꾸로되어 있습니다! 이것이 원인 일 수도 있습니다 (또는 기여 요소).

세션의 존재를 인증의 증거로 취급하면 안됩니다 (세션의 내용은 모두 다른 것입니다). 스크립트 상단에서 session_start()를 호출하십시오.

세션 데이터를 사용할 수없는 이유는 여기 FAQ입니다. 잠재적 원인에 대한 이전 답변/조사 방법 중 일부를 살펴보십시오.

+0

symcbean은 '거꾸로 설명하십시오.' – bollo

+0

symcbean 답변은 초콜릿 주전자처럼 유용합니다. 댓글을 정량화하면서 '거꾸로'와 같은 댓글을 게시하려면 어떻게해야합니까? – bollo

+0

답을 정량화하지 않고 -> typo – bollo

관련 문제