Я пытаюсь создать приложение Connect с помощью PHP и Zend Framework. У меня также есть система аутентификации пользователей на основе Zend_Auth. Теперь я могу войти в систему, используя Facebook, но выход из системы не работает.
Мне нужно очистить идентификатор Zend_Auth, а также удалить всю информацию для входа в Facebook. Какой был бы лучший способ сделать это?
Я попробовал facebook_client->expire_session()
и facebook_client->clear_cookie_state();
вместе, а также facebook_client->logout($next)
после вызова Zend_Auth::getInstance()->clearIdentity()
Ни один из них, похоже, не работает.
Сначала вы должны вызвать выход из системы javascript, а затем отправить их в скрипт выхода php. Итак, вызовите .js:
FB.Connect.logoutAndRedirect("/path/to/zend/logout/controller");
Вы увидите модальное всплывающее окно, в котором говорится: «Вы выходите из этого сайта и facebook *. Вы будете перенаправлены туда, где находится ваш скрипт выхода:
try { $facebook->expire_session(); } catch (FacebookRestClientException $e) { //you'll want to catch this //it fails all the time }
Обычно я вызываю эту функцию в скрипте выхода PHP, чтобы быть в безопасности:
/** * Remove the local Facebook cookies that get set manually * * @return void */ protected function _killFacebookCookies() { // get your api key $apiKey = $this->getConfig()->getApiKey(); // get name of the cookie $cookie = $this->getConfig()->getCookieName(); $cookies = array('user', 'session_key', 'expires', 'ss'); foreach ($cookies as $name) { setcookie($apiKey . '_' . $name, false, time() - 3600); unset($_COOKIE[$apiKey . '_' . $name]); } setcookie($apiKey, false, time() - 3600); unset($_COOKIE[$apiKey]); }
с/** * Remove the local Facebook cookies that get set manually * * @return void */ protected function _killFacebookCookies() { // get your api key $apiKey = $this->getConfig()->getApiKey(); // get name of the cookie $cookie = $this->getConfig()->getCookieName(); $cookies = array('user', 'session_key', 'expires', 'ss'); foreach ($cookies as $name) { setcookie($apiKey . '_' . $name, false, time() - 3600); unset($_COOKIE[$apiKey . '_' . $name]); } setcookie($apiKey, false, time() - 3600); unset($_COOKIE[$apiKey]); }
Вы можете выйти из учетной записи пользователя facebook и перенаправить пользователя на страницу своего сайта с помощью PHP-кода следующим образом:
header («Местоположение:». $ facebook-> getLogoutUrl (массив ('next' => "http://yourwebsite.com/redirectAfterFacebookLogout.php")));
(NEW FACEBOOK SDK) Для меня getconfig () не будет работать. Поэтому мне пришлось найти новые функции из файла base_facebook.php и добавить в него этот бит кода. Затем вызовите его в своем вызывающем файле. Прежде чем вы это сделаете, вызовите $ facebook-> destroySession ();
public function _killFacebookCookies() { // get your api key $apiKey = $this->getAppId(); // get name of the cookie $cookie = $this->getSignedRequestCookieName(); $cookies = array('user', 'session_key', 'expires', 'ss'); foreach ($cookies as $name) { setcookie($apiKey . '_' . $name, false, time() - 3600); unset($_COOKIE[$apiKey . '_' . $name]); } setcookie($apiKey, false, time() - 3600); unset($_COOKIE[$apiKey]); }
сpublic function _killFacebookCookies() { // get your api key $apiKey = $this->getAppId(); // get name of the cookie $cookie = $this->getSignedRequestCookieName(); $cookies = array('user', 'session_key', 'expires', 'ss'); foreach ($cookies as $name) { setcookie($apiKey . '_' . $name, false, time() - 3600); unset($_COOKIE[$apiKey . '_' . $name]); } setcookie($apiKey, false, time() - 3600); unset($_COOKIE[$apiKey]); }