У меня была такая же проблема на недавнем сайте, и я нашел способ ее преодолеть. Мое решение позволило пользователю уже войти в Facebook на своем компьютере, но не иметь автоматического входа на моем веб-сайте, тогда он может войти с помощью кнопки входа Facebook и, наконец, когда он выйдет, он не выйдет из Facebook на своем компьютере. , только на моем сайте (так же, как Digg делает с Facebook).
Для этого я использовал https://github.com/facebook/php-sdk/, чтобы проверить в PHP, существует ли активная сессия facebook с пользователем и веб-сайтом (что приведет к автоматическому входу в систему). Если бы был, я бы не повторил код авто логина:
FB.init({
appId : '<?php echo $facebook->getAppId(); ?>',
session : <?php echo json_encode($session); ?>, // don't refetch the session when PHP already has it
status : true, // check login status
cookie : true, // enable cookies to allow the server to access the session
xfbml : true // parse XFBML
});
FB.Event.subscribe('auth.login', function() {
window.location = "process-login.php";
});
но вместо этого просто создайте мою собственную кнопку входа в Facebook, которая будет ссылаться на "process-login.php".
process-login.php установит пользовательскую переменную $ _SESSION, которая сообщает моему веб-сайту, что кто-то вошел в систему (будь то через мою собственную систему или через facebook), а затем перезагрузит ссылающуюся страницу (используя $ _SERVER ['HTTP_REFERER']) который теперь будет отображать пользователя, вошедшего в систему через Facebook, поскольку теперь была установлена моя собственная переменная $ _SESSION. Чтобы выйти из них (без выхода из Facebook полностью, только с моего сайта), я просто загрузил бы скрипт выхода, который удалил переменную $ _SESSION.
example.php (в php-sdk на github) был очень полезен при поиске моего решения, хотя мне пришлось значительно его настроить, чтобы он работал с моей существующей системой. По крайней мере, это помогло мне увидеть, как получить доступ к переменной сеанса facebook в PHP (в примере хранится в $ me).
Надеюсь, это поможет вам, если это все еще проблема, или что это помогает кому-то еще в этой ситуации.
EDIT:
Оказывается, у меня все еще были некоторые проблемы с автоматическим входом в систему в редких случаях. Чтобы исправить это, я удалил event.subscribe ('auth.login') и сделал кнопку facebook, которая вызывала следующую функцию, чтобы проверить состояние входа в систему, прежде чем подписываться даже на auth.login. Вот функция:
function check_login_session(){
FB.getLoginStatus(function(r){
if(r.session){
window.location = '/process-login.php';
}
else{
FB.Event.subscribe('auth.login', function(response) {
window.location = '/process-login.php';
});
FB.login();
}
});
}`