我正在使用Facebook Connect應用程序。想象一下,這是一種應用程序,用戶訪問我的網站,點擊連接按鈕,登錄Facebook並返回到我的網站,並等待其他用戶進行連接。會話清除問題與PHP
連接時使用的參數是offline_access
。一旦用戶回到我的網站, 我需要清除所有會話cookie。如果會話未成功清除,並且下一個用戶來到並連接,則用戶將無法獲得登錄頁面,而是會在進入上次會話狀態後立即重定向到我的響應URL。
我嘗試這些方法一起清除會話:
if (ini_get("session.use_cookies")) {
$params = session_get_cookie_params();
setcookie(session_name(), '', time() - 42000,
$params["path"], $params["domain"],
$params["secure"], $params["httponly"]);
}
if (isset($_SERVER['HTTP_COOKIE'])) {
$cookies = explode(';', $_SERVER['HTTP_COOKIE']);
foreach($cookies as $cookie) {
$parts = explode('=', $cookie);
$name = trim($parts[0]);
setcookie($name, '', time()-42000);
setcookie($name, '', time()-42000, '/');
}
}
與上述方法,什麼是工作,但不是所有的會議都被清除,尤其是Facebook的域特定的Cookie。所以,爲了刪除Facebook cookies,我嘗試了以下靜態方法以測試它的工作原理。但是,即使這也失敗了。
setcookie('L', '', time()-42000,"/",".facebook.com");
setcookie('act', '', time()-42000,"/",".facebook.com");
setcookie('c_user', '', time()-42000,"/",".facebook.com");
setcookie('datr', '', time()-42000,"/",".facebook.com");
setcookie('locale', '', time()-42000,"/",".facebook.com");
setcookie('lu', '', time()-42000,"/",".facebook.com");
setcookie('pk', '', time()-42000,"/",".facebook.com");
setcookie('p', '', time()-42000,"/",".facebook.com");
setcookie('presence', '', time()-42000,"/",".facebook.com");
setcookie('s', '', time()-42000,"/",".facebook.com");
setcookie('sct', '', time()-42000,"/",".facebook.com");
setcookie('x-src', '', time()-42000,"/",".facebook.com");
setcookie('xs', '', time()-42000,"/",".facebook.com");
最後,我想正常的方法,
unset($_SESSION['fb_243155855719532_access_token']);
unset($_SESSION['fb_243155855719532_code']);
unset($_SESSION['fb_243155855719532_user_id']);
unset($_SESSION['fb_243155855719532_state']);
// Finally, destroy the session.
session_unset();
session_destroy();exit;
銷燬會話工作,但還是Facebook的會話沒有得到清除。如果我嘗試使用Firefox Web Dev插件清除會話cookie,它會非常巧妙地工作。