【问题标题】:Unable to set Cookie in php无法在 php 中设置 Cookie
【发布时间】:2013-05-02 14:50:05
【问题描述】:

我正在使用社交登录。我试过login with facebook。一旦用户通过身份验证,我就可以获得他们的价值,我需要在 cookie 中设置他们的 ID,以便我可以在整个站点上创建会话。

这是我的代码,

<?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
    }
?>

在更新我的域后设置 cookie。但这对我不起作用。

【问题讨论】:

  • 您确定设置了用户 ID 吗?
  • 那可能是你的cookies只有在下一页刷新后才可用。
  • 如何测试要设置的 cookie?
  • 浏览器没有禁用cookies吗?
  • 只需在 chrome 中输入 chrome://settings/cookies。检查 vignesh.gvignesh.org 域,您可以在那里看到 cookie

标签: php html cookies setcookie


【解决方案1】:

来自 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)。

如果您已经开始输出,则无法设置 cookie。因此,您需要将您的 setcookie 代码拉到您的第一个 HTML 之上。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多