Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/226.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何在登录Facebook API后保持Twitter API会话的活动状态?_Php_Facebook Graph Api_Twitter_Facebook Php Sdk - Fatal编程技术网

Php 如何在登录Facebook API后保持Twitter API会话的活动状态?

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的订阅源以及其他混合在一起的数据 我

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会话数据

下面是我测试数据的步骤:

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

问题的解决办法:

  • 通配符cookie
    session_set_cookie_params(0,“/”,“.mywebsite.com”)
  • 更好的解决方案-不要混合和匹配子域,设置一个规范URL并坚持它

  • 这里发生了什么:
    header('Location:./clearsessions.php')?另外,也许twitter和facebook共享会话变量名,所以一个会覆盖另一个?这是你必须通过查看图书馆才能发现的。事实并非如此。。。会话有两个不同的id…我也更改了变量名…如果clearsessions.php是来自twitteroauth的,那么如果您没有facebook id和令牌,您的会话就会被破坏。它不仅会被销毁,还会重新生成会话,因此您有一个新的会话id。一旦有了新的会话id,您就有了新的会话值(开始时为空)。尝试刷新connect.php
    header('Location:./connect.php')而不是clearsessions.php,看看会发生什么。谢谢。。你是一个有灵魂的人。。这个问题贴了很多次,没有人回答。祝你成为下一个扎克伯格!!你的回答被接受了!!!