我遇到的情况是,当用户登录我的应用程序时,我会创建自己的会话变量。 每当我的用户从我的应用程序注销时,我清除自己的会话,然后再调用fb注销..
$facebook = new Facebook(array(
'appId' => $this->key,
'secret' => $this->secret,
));
$logoutUrl = $facebook->getLogoutUrl(array('next' => my url));
Yii::app()->request->redirect($logoutUrl);
但是当我的用户通过画布进入应用程序时,如果他们从Facebook本身注销,那么我无法跟踪他们何时退出Facebook。所以我的会话值仍然存在,当我再次与其他用户登录时,旧的会话在live。
我该怎么处理?有没有办法找出用户从Facebook注销的事件,我也可以删除我的会话?
答案 0 :(得分:2)
旧会话导致什么问题?通常情况下,即使来自其他用户的先前会话仍然存在,我也不希望以其他用户身份登录导致任何问题,因为再次登录的行为将“重置”任何会话值与属于新用户的会话值。或者如果它更简单,登录的行为将清除任何现有会话并开始一个新会话。
对于画布访问,通常应该有类似的东西。在这种情况下,接收signed_request参数可以被视为新的登录操作,清除任何旧的会话值或至少检查它们是否与当前用户匹配。
如果某些其他问题是由于会话闲置引起的(例如可能将人们显示为已连接但实际上并非如此),那么您可能需要实施一个定期流程,根据某些不活动阈值清除会话。它并不优雅,但它是捕捉用户根本没有注销而只是关闭浏览器的唯一方法。
答案 1 :(得分:0)
很抱歉,我不能对上面的答案发表评论,但这如何适用于客户机上保存的身份验证cookie?
例如,我有一个随会话过期的.net身份验证cookie,但如果用户注销facebook,则cookie将保留,并且某些功能是基于此构建的。我知道它是一个异常值,但仍然相关。