Php 如何在登录Facebook API后保持Twitter API会话的活动状态?
Facebook、Google+和Twitter的两个不同API代码分别位于三个不同的文件夹中:“Facebook”文件夹用于Facebook API,“Twitter”文件夹用于Twitter和“Google_plus” 我试图允许人们通过Twitter登录并访问该应用程序,并让他们在通过Twitter登录后也可以通过Facebook登录,并在通过Facebook登录后保留基于Twitter的数据。我基本上希望他们能够同时查看Twitter和Facebook的订阅源以及其他混合在一起的数据 我试图实现会话,但看起来如果他们先通过Twitter登录后再通过Facebook登录,Twitter会话变量内容将变为NULL,并且只显示Facebook会话数据。我如何操作会话,以便在用户通过Facebook登录时保留Twitter会话数据 下面是我测试数据的步骤:Php 如何在登录Facebook API后保持Twitter API会话的活动状态?,php,facebook-graph-api,twitter,facebook-php-sdk,Php,Facebook Graph Api,Twitter,Facebook Php Sdk,Facebook、Google+和Twitter的两个不同API代码分别位于三个不同的文件夹中:“Facebook”文件夹用于Facebook API,“Twitter”文件夹用于Twitter和“Google_plus” 我试图允许人们通过Twitter登录并访问该应用程序,并让他们在通过Twitter登录后也可以通过Facebook登录,并在通过Facebook登录后保留基于Twitter的数据。我基本上希望他们能够同时查看Twitter和Facebook的订阅源以及其他混合在一起的数据 我
session_start();
require('../database/connection.php');
require_once('../twitter/twitteroauth/twitteroauth.php');
require_once('../twitter/config.php');
include_once '../facebook/fbmain.php';
在这里,我将测试$\u SESSION变量,以查看用户登录Facebook后是否保留了twitter数据。。但是Twitter数据变为NULL,$\u会话数组只显示Facebook数据。。在有人也通过Facebook登录之后,我如何使Twitter会话数据保持不变
var_dump($_SESSION); var_dump(session_id()); // twitter session data gets overriden by facebook data although the variable names are different ..
/* If access tokens are not available redirect to connect page. */
if (empty($_SESSION['facebook_id']) && (empty($_SESSION['access_token']['oauth_token']) || empty($_SESSION['access_token']['oauth_token_secret']))) {
header('Location: ./clearsessions.php');
}
else {
/* Get user access tokens out of the session. */
$access_token = $_SESSION['access_token'];
/* Create a TwitterOauth object with consumer/user tokens. */
$connection = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET, $access_token['oauth_token'], $access_token['oauth_token_secret']);
/* If method is set change API call made. Test is called by default. */
$content = $connection->get('account/verify_credentials');
$json = json_encode($content);
$data = json_decode($json,true);
$screen_name = $data["screen_name"];
$name = $data["name"];
$image_url = $data['profile_image_url'];
$_SESSION['screen_name'] = $screen_name;
$_SESSION['image_url'] = $image_url;
$query = "SELECT * FROM Users WHERE username ='$screen_name'";
$result = mysql_query($query);
$result_count = mysql_num_rows($result);
if($result_count == 0) {
$insert = "INSERT INTO Users(username) VALUES('$screen_name')";
$result_insert = mysql_query($insert);
}
}
if(isset($_SESSION['oauth_token']) && isset($_SESSION['oauth_token_secret']) && isset($_SESSION['facebook_id'])){
$user = $_SESSION['facebook_id'];
}
?>
调试完他的应用程序后,他的Facebook被设置为重定向到他的
www
子域,而Twitter被设置为重定向到没有子域。由于cookie是在严格的基础上发布的,因此会话丢失
因此,在通过Facebook登录后,用户被带到www
,该网站发布了一个会话/cookie,在通过Twitter登录后,用户被带到plain domain,在那里发布/呈现了一个完全不同的会话/cookie
问题的解决办法:
session_set_cookie_params(0,“/”,“.mywebsite.com”)代码>
这里发生了什么:
header('Location:./clearsessions.php')代码>?另外,也许twitter和facebook共享会话变量名,所以一个会覆盖另一个?这是你必须通过查看图书馆才能发现的。事实并非如此。。。会话有两个不同的id…我也更改了变量名…如果clearsessions.php是来自twitteroauth的,那么如果您没有facebook id和令牌,您的会话就会被破坏。它不仅会被销毁,还会重新生成会话,因此您有一个新的会话id。一旦有了新的会话id,您就有了新的会话值(开始时为空)。尝试刷新connect.phpheader('Location:./connect.php')代码>而不是clearsessions.php,看看会发生什么。谢谢。。你是一个有灵魂的人。。这个问题贴了很多次,没有人回答。祝你成为下一个扎克伯格!!你的回答被接受了!!!