簡體   English   中英

通過Facebook API登錄后如何使Twitter API會話保持活動狀態?

[英]How to keep Twitter API session alive after logging through Facebook API?

Facebook,Google +和Twitter的兩個不同的API代碼位於三個各自不同的文件夾中:Facebook API的“ facebook”文件夾,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';

在這里,我將測試$ _SESSION變量,以查看在用戶通過Facebook登錄后是否也保留了Twitter數據..但是Twitter數據卻變為NULL,而$ _SESSION數組僅顯示Facebook數據..如何使Twitter會話數據有人也通過Facebook登錄后繼續住宿嗎?

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登錄后,用戶被帶到了普通域,在該域​​中發布/展示了一個完全不同的會話/ cookie。

解決問題的方法:

  1. 通配符cookie session_set_cookie_params( 0, '/', '.mywebsite.com' );
  2. 更好的解決方案-不要混合和匹配子域,設置一個規范的URL並堅持下去。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM