2010-08-07 4 views
10

jQuery와 AJAX 호출로 로그인 폼의 유효성을 검사하고 있습니다. PHP에서는 세션을 만들고 'remember me'확인란을 선택하면 쿠키를 만들고 싶습니다. 여기에 PHP 코드가 있습니다 :AJAX 요청에 쿠키를 설정 하시겠습니까?

<?php 

include '../includes/connection.php'; 
date_default_timezone_set('GMT'); 

$name = $_POST['username']; 
$pass = $_POST['password']; 


$query = mysql_query("SELECT id, username, password FROM users WHERE username = '$name' LIMIT 1"); 

if(mysql_num_rows($query) == 0) { 
echo 'error'; 
exit; 
} 

while($row = mysql_fetch_array($query)) { 

if($row['username'] == $name && $row['password'] == $pass) { 

    session_start(); 
    $_SESSION['username'] = $row['username']; 
    $_SESSION['usrID'] = $row['id']; 
    echo 'success'; 


    if($_POST['remember']) { 
    setcookie('username', $row['username'], $exp); 
    setcookie('password', $row['password'], $exp); 
    setcookie('usrID', $row['id'], $exp); 
    } 

} else { 
    echo 'error'; 
    exit; 
} 



} 


?> 

세션이 성공적으로 설정되었지만 쿠키가 설정되지 않았습니다. 모든 값 (도메인, 경로 등)을 설정해 보았지만 아무 것도 변경하지 않았습니다. 내가 놓친 게 분명해?

+0

여기서 '$ exp'변수는 어디에서 오는가? – Sarfraz

+0

죄송합니다, 그건 단지 오타였습니다. $ exp는 만료일 (2 개월)보다 일찍 정의되었습니다. – williamg

+4

오, 쿠키에 암호를 설정하고 싶지는 않습니다. md5로 지정 했더라도. 세션 ID가 훨씬 좋다. – CpILL

답변

14

여기에 몇 가지 제안은 다음과 같습니다

  • 당신이 날짜의 올바른 만료 형식을 지정하고 있는지 확인
  • 리디렉션 페이지에 쿠키를 설정하는 경우, 쿠키가 호출 후 설정해야합니다

    header('Location: ....'); 예 :

    header('Location: http://www.example.com/'); setcookie('asite', $site, time()+60*60, '/', 'site.com');

  • 당신이 www.domain.com/path1/path2/처럼 인간의 URL이있는 경우, 일 쿠키 경로를 /로 설정하여 현재 경로뿐만 아니라 모든 경로에서 작동하도록 설정해야합니다.

    setcookie('type_id', $new_type_id, time() + 60*60*24*30, '/');

공지 인수의 마지막 /. PHP 설명서에서

:

쿠키가 사용할 수있는 서버의 경로. '/'으로 설정하면 전체 도메인에서 의 쿠키를 사용할 수 있습니다. '/ foo /'로 설정하면 쿠키는/foo/디렉토리 및 /foo/bar/도메인의 모든 하위 디렉토리에서만 사용 가능한 이됩니다. 기본 값은 쿠키가 설정되고 현재 디렉토리입니다.

  • setcookie()

    는 HTTP 헤더의 나머지와 함께 전송되는 쿠키를 정의합니다. 다른 헤더와 마찬가지로 쿠키는 스크립트의 출력 전에 보내 져야합니다. 즉, 그 전에 html/code echo 문이 없어야합니다.
+0

굉장! 나는 전에 echo 문을 만들고, 그것을 바꿨고, 모든것이 작동했다. 루트 ('/')에 대한 경로를 만들 때 쿠키를 설정하지 않았다. 내가 잘못된 것을하고 있는가? – williamg

+0

@iMaster : 환영합니다 :) – Sarfraz

+0

내 의견의 마지막 부분을 확인하고 방금 편집했습니다. – williamg

-12

AJAX 호출을 사용할 때 쿠키 서버 측을 설정할 수 없습니다. 대신 성공한 응답을 받고 쿠키 클라이언트 측을 설정할 때까지 기다리십시오. 쉽게 만들려면 use a jQuery plugin 수 있습니다.

+14

죄송하지만 Ajax 호출을 사용하여 쿠키를 설정할 수없는 이유는 무엇입니까? Ajax 호출은 자체 요청 및 응답 헤더가있는 일반 http 요청입니다. 우리는 쿠키를 포함한 모든 정보를 헤더에 추가 할 수 있습니다. 내가 옳지 않은가? – Kirzilla

+1

http://stackoverflow.com/questions/3340797/can-an-ajax-response-set-a-cookie – Ryan

+0

왜 세계에서 5 명이 이것을 왜곡 했습니까? AJAX 콜에서 set-cookie 헤더를 반환 할 수 없거나 브라우저가이를 존중하지 않을 것이라고 말하는 것은 완전히 잘못된 것입니다. '쿠키 서버 측 설정'에 대한 이야기는 HTTP가 작동합니다. –

관련 문제