Два разных кода API для Facebook, Google+ и Twitter расположены в трех соответствующих папках: папка «facebook» для Facebook API, «twitter» для Twitter и «google_plus».
Я пытаюсь разрешить пользователям регистрироваться через Twitter и получать доступ к приложению, а также дать им возможность также войти в систему через Facebook после входа в систему через Twitter и сохранить данные на основе твиттера после того, как они вошли в Facebook. В основном я хотел бы, чтобы они могли одновременно просматривать как свои каналы Twitter, так и Facebook, а также другие данные.
Я попытался реализовать сеансы, но похоже, что если они регистрируются через Facebook после входа в Twitter в первую очередь, содержимое переменной сеанса Twitter становится NULL, и отображаются только данные сеанса Facebook. Как я могу манипулировать сеансами, чтобы данные сеанса Twitter могли храниться при регистрации пользователя через Facebook?
Ниже я попытался проверить данные:
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 становятся 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.
Решения проблемы:
session_set_cookie_params( 0, '/', '.mywebsite.com' );