2012-11-21 63 views
1

我试图找到一个小时的解决方案 - 没有成功。所以我希望你们中的一个能够帮助我: 看起来这个脚本总是开始一个新的会话 - 我不知道为什么。授权和PHP会话

<?php 

$code = $_REQUEST["code"]; 

if(empty($code)) { 
$_SESSION['state'] = md5(uniqid(rand(), TRUE)); 
$dialog_url = "https://www.facebook.com/dialog/oauth?client_id=" 
    . $app_id . "&redirect_uri=" . urlencode($my_url) . "&state=" 
    . $_SESSION['state']. "&scope=publish_actions,publish_stream"; 

echo("<script> top.location.href='" . $dialog_url . "'</script>"); 
} 

if($_SESSION['state'] && ($_SESSION['state'] === $_REQUEST['state'])) { 
    $token_url = "https://graph.facebook.com/oauth/access_token?" 
    . "client_id=" . $app_id . "&redirect_uri=" . urlencode($my_url) 
    . "&client_secret=" . $app_secret . "&code=" . $code; 

$response = file_get_contents($token_url); 
$params = null; 
parse_str($response, $params); 
    $_SESSION['access_token'] = $params['access_token']; 
} 
else { 
echo("Sessionstate: ".$_SESSION['state']."<br>"); 
echo("REQUEST_state: ".$_REQUEST['state']."<br>"); 
echo("Sessionstatus stimmt nicht mit dem REQUEST_State &uuml;berein."); 
var_dump ($_REQUEST); 
exit; 
} 
?> 

会议开始包含文件中,才能将使用常规此脚本:

session_start(); 

我试图用

<form action="<?=$_SERVER['PHP_SELF'];?>?what=save&state=<?=$_SESSION['state'];?>" method="post" enctype="multipart/form-data"> 

从我的指标通过“状态”。 PHP文件。

感谢您的阅读和帮助。

尊敬的基督徒。

编辑:这里的链接到开发者博客:https://developers.facebook.com/blog/post/2011/05/13/how-to--handle-expired-access-tokens/

+0

不要以这种方式使用'$ _SERVER ['PHP_SELF'];''见:http://stackoverflow.com/questions/6080022/php-self-and-xss – czachor

回答

0

当没有会话您应该只启动一个会话。你保存会话吗?

<?php 
    if (!isset ($_COOKIE[ini_get('session.name')])) { 
    session_start(); 
    } 
?> 
+0

谢谢你的提示。没有改变任何东西。根据php.net'session_start - 开始新的或恢复现有会话'我认为它总是继续一个会话。 – MaxMara