2016-04-01 8 views
2

HybridAuthが最後のユーザーログインを忘れるようにしようとしていましたが、何もできませんでした。 HybridAuthを使用しているとき、私は非常に奇妙なセッションの行動に気づいた:session_destroyを使用した場合HybridAuth予期せぬセッション動作

の1- HybridAuthセッションであっても破壊されない:

session_start(); 
var_dump($_SESSION); //Session Values before authentication 

require_once("hybridauth/Hybrid/Auth.php"); 
$config = 'hybridauth/config.php'; 

$hybridauth = new Hybrid_Auth($config); 
$google = $hybridauth->authenticate("Google"); 

session_unset(); 
session_destroy(); 

var_dump($_SESSION); //Session values after destroy 

出力:

Session Values before authentication! 
array (size=2) 
    'HA::CONFIG' => 
    array (size=3) 
    < ----- content here ------> 
    'HA::STORE' => 
    array (size=5) 
    < ----- content here ------> 

Session values after destroy 
array (size=0) 
    empty 

私はセッション値を取得しますHybrid_Authクラスを初期化する前でも可能です。また、コードの最後にクリアされた値が表示されますが、ページを更新すると同じ値が残っています。

2 - 無限のリダイレクトループ私は上記のコードを実行すると開始時に、あなたは明らかセッション

session_start(); 
session_destroy(); 

require_once("hybridauth/Hybrid/Auth.php"); 
$config = 'hybridauth/config.php'; 

$hybridauth = new Hybrid_Auth($config); 
$google = $hybridauth->authenticate("Google"); 

私はERR_TOO_MANY_REDIRECTSエラーが出ます!

ここでは何が起こっていますか?

答えて

4

あなたはこの方法

であなたのAuth.phpファイルを変更することで、特定のプロバイダのためのセッションを削除することができ

$this->load->library('hybridauthlib'); 

$this->hybridauthlib->logoutAllProviders(); 

または

を呼び出すことにより、一度にすべてのプロバイダのためのハイブリッド認証セッションをクリアすることができます

// -------------------------------------------------------------------- 

/** 
* A generic function to logout from a specific provider 
*/ 

public static function logoutFromProvider($provider) 
{ 
    $adapter = Hybrid_Auth::getAdapter($provider); 

    $adapter->logout(); 
} 

このようにこのメソッドを呼び出すことができます。

//$provider can be Facebook, Twitter, Google etc. 
public function logout($provider) 
{ 
    $this->hybridauthlib->logoutFromProvider($provider); 
}