【发布时间】:2011-11-24 15:01:26
【问题描述】:
我正在使用Facebook Connect 应用程序。想象它是一种应用程序,用户来到我的网站,点击连接按钮,登录到 Facebook,然后回到我的网站并等待其他用户连接。
我在连接时使用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 cookie,我还尝试了以下静态方法来测试它是如何工作的。但是,即使这样也失败了。
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,它会非常智能地工作。
【问题讨论】: