views:

484

answers:

2

I am facing an error with my web app that uses Facebook connect that occurs when the user has both my web app open and Facebook.com open and logs out of Facebook.com. Since my app and the Facebook Connect library is unaware that the session is no longer valid, when it tries to user certain Facebook Connect functions that require a valid session, I get a 'FacebookRestClientException' with message 'Session key invalid or no longer valid.' Just wondering what the best practice is for handling this case for a php app.

From Googling I found that there's a JS function that pings the Facebook server to see if a user is logged in but I need a server side solution.

+1  A: 

use:

$fb_user=$facebook->get_loggedin_user();

this will tell you the facebook_uid of the logged in user or return false if not logged in.

example:

$fb_user=$facebook->get_loggedin_user();

if($fb_user)
{
    try{
        $setstatus = $facebook->api_client->users_setStatus(
            $status,
            $facebook_uid
            );
        echo 'status has been updated';
    }catch (Exception $e) {
        if($e->getCode() === 102)
        {
           // user is not logged in
           echo 'you must log in to update your status';
        }
        log_error($e->getMessage()); // log your error so you can fix it if you need to
    }
}else{
    echo 'you must log in';
}
Jayrox
I believe this value is set and stored in the Facebook object on the server side which is unaware that the user has logged out of Facebook.com so it will return a facebook_uid even if the user is actually logged out. I tried this out just in case and it does not work...
jcmoney
in that case you can catch the error, check it for the return.Looking at my error log I see 'Session key invalid or no longer valid' as the return. You may want to check into that.
Jayrox
facebook returns:error: 102constant: API_EC_PARAM_SESSION_KEYdescription: Session key invalid or no longer validon all methods if the session is invalid
Jayrox
updated with 102 check
Jayrox
A: 

Since I use CodeIgniter in my project, I use this library to do Facebook Connect. I just follow the example code from Facebook. Then I just follow the flow here and a guide here. When logout, I also do logout from Facebook, otherwise Facebook session can re-detected by my application and the user logged back in.

Donny Kurnia