【发布时间】:2012-11-21 10:15:12
【问题描述】:
我试图找到解决方案几个小时 - 没有成功。所以我希望你们中的一个人可以帮助我: 似乎这个脚本总是开始一个新会话 - 我不知道为什么。
<?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 überein.");
var_dump ($_REQUEST);
exit;
}
?>
会话在包含此脚本之前的包含文件中开始:
session_start();
我试图用
传递“状态” <form action="<?=$_SERVER['PHP_SELF'];?>?what=save&state=<?=$_SESSION['state'];?>" method="post" enctype="multipart/form-data">
来自我的 index.php 文件。
感谢您阅读并帮助我。
问候克里斯蒂安。
编辑:这里是开发者博客的链接:https://developers.facebook.com/blog/post/2011/05/13/how-to--handle-expired-access-tokens/
【问题讨论】:
-
不要以这种方式使用
$_SERVER['PHP_SELF'];。见:stackoverflow.com/questions/6080022/php-self-and-xss