2013-05-09 3 views
1

이 주제에 대한 많은 게시물을 이미 검토했지만 코드가 쿠키를 설정하는 것 같지 않습니다.ajax 호출에서 PHP로 쿠키 설정

$("#loginForm").submit(function(event) { 
    event.preventDefault(); 
    var uid = document.getElementById("userLogin").value; 
    var pid = document.getElementById("passLogin").value; 
    var url = "../_scripts/loginScript.php"; 

    $.ajax({ 
      type: "POST", 
      url: url, 
      datatype : "script",    
      data: {user: uid, pass: pid}, 
      success: function(msg) { 
       if(strcmp(msg,"passwords are equal")) 
        location.reload(); 
       else       
        $('#error1').html(msg).show(100);  
      } 
    }); 
}); 

내가 다른 JS 라이브러리에 strcmp() 기능을 썼다 :

나의 초기 Ajax 호출이 같은 것입니다. 내가 그것을 테스트 할 때

<?php 
    if($hashPass == $pass) 
    { 
     echo "passwords are equal"; 
     $cookieInfo = $_POST['user'].",".$clearance; 
     setcookie("loggedIn", $cookeInfo,0,"/"); 
     exit; 
    } 
    else 
    { 
     echo "Invalid password"; 
     exit; 
    } 
?> 

에서, "암호가 동일한"메시지가 다시 와서 페이지가 다시로드됩니다 ...하지만 :

물건을 해싱의 무리를하고 소금에 절인 후 내 PHP는 같이 보입니다 내 쿠키를 확인하면 내 쿠키가 설정되지 않습니다.

내가 뭘 잘못하고 있는지 잘 모르겠어 ... 전에 PHP 파일에 직접 제출하는 양식을 사용하고 벌금을 부과 할 때이 코드를 사용했지만 지금은 아약스를 사용하고 있습니다. 쿠키가 설정되지 않는 것 같습니다.

header("Location: ..."); 전화를 걸어서 쿠키를 설정하지 않았기 때문입니까?

답변

2

setcookie() 문에 오타가 있습니다. 따라서 쿠키에 사용할 수있는 데이터가 없습니다.

setcookie("loggedIn", $cookeInfo,0,"/"); 

는 헤더 전에 출력 전송을 방지하기 위해 echo 문을 제거해야합니다, 또한

setcookie("loggedIn", $cookieInfo,0,"/"); // cookie != cooke 

해야한다. 다른 유형의 출력보다 먼저 모든 헤더 정보 (쿠키 설정 포함)를 보내야합니다.

+0

와우 나는 위선적 인 말을 믿지 않았다. 그 점을 지적 해 주셔서 감사합니다. echo 명령문을 setcookie 아래의 줄로 이동하는 것은 의미가 없습니다. – nyduss

+0

예,'setcookie()'아래에서 에코를 움직일 수 있습니다. 그러면 모든 헤더가 데이터 전에 전송됩니다. –

+0

ok echo를 setcookie() 호출 아래로 옮겼습니다. 이제 도움이되었습니다. 지금 가지고있는 유일한 문제는 내 strcmp() 함수가 더 이상 작동하지 않고 페이지가 다시로드되지 않는다는 것입니다 ... 그것에 대한 제안이 있습니까? msg의 데이터 유형을 변경하는 방법에 쿠키를 설정하는지 알고 있습니까? – nyduss

0

여기 몇 가지가 있습니다. PHP가 헤더를 보낸다고 생각하기 때문에 setcookie()를 호출하기 전에 데이터를 에코하면 오류가 발생합니다. 또한 코드에 오타가 있습니다. 쿠키 값을 $ cookieInfo로 설정하고 $ cookeInfo를 setcookie()의 매개 변수로 설정합니다.