2013-05-08 5 views
-1

소셜 로그 작업 중입니다. 나는 login with facebook을 시도했다. 일단 사용자가 인증되면 자신의 가치를 얻을 수 있으며 사이트에서 세션을 만들 수 있도록 쿠키에 ID를 설정해야합니다.쿠키를 PHP에서 설정할 수 없습니다.

다음

내 코드는,

<?php 
/* 
* login_with_facebook.php 
* 
* @(#) $Id: login_with_facebook.php,v 1.2 2012/10/05 09:22:40 mlemos Exp $ 
* 
*/ 
    require('http.php'); 
    require('oauth_client.php'); 

    $client = new oauth_client_class; 
    $client->server = 'Facebook'; 
    $client->redirect_uri = 'http://'.$_SERVER['HTTP_HOST']. 
     dirname(strtok($_SERVER['REQUEST_URI'],'?')).'/login_with_facebook.php'; 

    $client->client_id = ''; $application_line = __LINE__; 
    $client->client_secret = ''; 

    if(strlen($client->client_id) == 0 
    || strlen($client->client_secret) == 0) 
     die('Please go to Facebook Apps page https://developers.facebook.com/apps , '. 
      'create an application, and in the line '.$application_line. 
      ' set the client_id to App ID/API Key and client_secret with App Secret'); 

    /* API permissions 
    */ 
    $client->scope = 'email'; 
    if(($success = $client->Initialize())) 
    { 
     if(($success = $client->Process())) 
     { 
      if(strlen($client->access_token)) 
      { 
       $success = $client->CallAPI(
        'https://graph.facebook.com/me', 
        'GET', array(), array('FailOnAccessError'=>true), $user); 
      } 
     } 
     $success = $client->Finalize($success); 
    } 
    if($client->exit) 
     exit; 
    if($success) 
    { 
?> 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 
<html> 
<head> 
<title>Facebook OAuth client results</title> 
</head> 
<body> 
<?php 

echo "This is id i got from facebook ".$user->id." I am unable to set this value in cookie."; 

mysql_connect('localhost', 'user_id', 'pwd'); 
mysql_select_db("DB Name");  

$sql = "INSERT INTO oauth SET auth_id = ".$user->id.", 
            name  = '".$user->name."', 
            email = '".$user->email."', 
            link  = '".$user->link."'"; 
mysql_query($sql); 

if(isset($_COOKIE['auth_id'])) 
    unset($_COOKIE['auth_id']); 

setcookie("auth_id", $user->id, time()+60*60*24, "/"); 
?> 

<script> 
//window.close(); 
</script> 
</body> 
</html> 
<?php 
    } 
    else 
    { 
?> 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 
<html> 
<head> 
<title>OAuth client error</title> 
</head> 
<body> 
<h1>OAuth client error</h1> 
<pre>Error: <?php echo HtmlSpecialChars($client->error); ?></pre> 
</body> 
</html> 
<?php 
    } 
?> 

그냥 내 도메인을 업데이트 한 후 쿠키를 설정. 그러나 이것은 나를 위해 작동하지 않습니다.

+0

사용자 ID가 설정되어 있는지 확인하고 있습니까? –

+1

쿠키는 다음 페이지를 새로 고친 후에 만 ​​사용할 수 있습니다. – egig

+1

쿠키 설정 여부는 어떻게 테스트합니까? – Luceos

답변

2

php.net 웹 사이트 : Like other headers, cookies must be sent before any output from your script (this is a protocol restriction). (http://www.php.net/manual/en/function.setcookie.php).

이미 출력을 시작한 경우 쿠키를 설정할 수 없습니다. 그러므로 당신은 첫 번째 HTML 위에 setcookie 코드를 가져와야합니다.