2015-08-24 6 views
0

Несмотря на то, что я часами на это пытаюсь, я не могу понять, почему я не могу уничтожить эту сессию Facebook. Выходной URL-адрес выходит из Facebook, но я не могу уничтожить сеанс. Я прошел через Stack Overflow, но ни один из ответов не помог до сих пор.Facebook PHP Уничтожить сеанс

session_start(); 
$app_id = 'XXX'; 
$app_secret = 'XXX'; 
$redirect_uri = 'XXX'; 
$permissions = array(XXX); 
define('ROOT', dirname(__FILE__) . '/'); 
require_once(ROOT . 'facebook-php-sdk-v4-4.0-dev/autoload.php'); 

use Facebook\FacebookSession; 
use Facebook\FacebookRedirectLoginHelper; 

// Initialize the SDK 
FacebookSession::setDefaultApplication($app_id, $app_secret); 
$helper = new FacebookRedirectLoginHelper($redirect_uri); 

// Check if existing session exists 
if (isset($_SESSION) && isset($_SESSION['fb_token'])) { 
    // Create new session from saved access_token 
    $session = new FacebookSession($_SESSION['fb_token']); 
    // Validate the access_token to make sure it's still valid 
    try { 
     if (! $session->validate()) { 
     $session = null; 
     } 
    } catch (Exception $e) { 
     // Catch any exceptions 
     $session = null; 
    } 
} else { 
    // No session exists 
    try { 
    $session = $helper->getSessionFromRedirect(); 
    } catch(FacebookRequestException $ex) { 

    // When Facebook returns an error 
    } catch(Exception $ex) { 

    // When validation fails or other local issues 
    echo $ex->message; 
    } 
} 
// Check if a session exists 
if (isset($session)) { 
    // Save the session 
    $_SESSION['fb_token'] = $session->getToken(); 
    // Create session using saved token or the new one we generated at login 
    $session = new FacebookSession($session->getToken()); 

    // Create the logout URL 
    $logoutURL = $helper->getLogoutUrl($session, 'http://msbooth.azurewebsites.net/'); 

ВОТ ПРОБЛЕМА РАЗДЕЛ:

if(isset($_GET['action']) && $_GET['action'] === 'logout'){ 
     $session->destroySession(); 
     header('Location: ' . $helper->getLogoutUrl($session, 'XXX')); 
    } 

Любые идеи о том, почему сессия не будет уничтожать добро пожаловать! Я не думаю, что я вызываю действие на нужном объекте. Остальная часть кода ниже для справки.

} else { 
    // No session - Get Login URL 
    $loginUrl = $helper->getLoginUrl($permissions); 

    echo '<a href="' . $loginUrl . '">Log in with Facebook</a>'; 
} 

ответ

0

Как ни странно, это, по-видимому, устранило проблему. Является ли это лучшей практикой или это провалится?

 // Create the logout URL (logout page should destroy the session) 
    $logoutURL = $helper->getLogoutUrl($session, 'http://msbooth.azurewebsites.net/'); 
    $redirectlogout = 'Location: ' . $helper->getLogoutUrl($session, 'http://msbooth.azurewebsites.net/'); 
    if(isset($_GET['action']) && $_GET['action'] === 'logout'){ 
     session_destroy(); 
     header($redirectlogout); 
    }