用户模块 /modules/member/index.php function logout()
首先PHPCMS的登出的代码里面有一句同步登出的语句:
$synlogoutstr = $this->client->ps_member_synlogout();
这个同步登出的代码是这样的: modules/member/classes/client.class.php 大概第67行
/** * 同步退出 * @param string $uid * @return string javascript用户同步退出js */ public function ps_member_synlogout() { return $this->_ps_send('synlogout', array()); }
注意这里_ps_send的第二个参数是一个空的数组
再看到phpsso_server中phpsso类的构造函数: phpsso_server/phpcms/modules/phpsso/classes/phpsso.class.php 大概第32行
if(isset($_POST["data'])) { parse_str(sys_auth($_POST['data'], 'DECODE', $this->applist[$this->appid]['authkey']), $this->data); if(emptyempty($this->data) || !is_array($this->data)) { exit('0'); } } else { exit('0'); }
这里对$this->data有一个判断,如果empty返回true就直接返回0不会再执行下面的同步退出代码了。而上面一步可以看到调用同步登出时传入的data参数恰恰就是array(),empty当然会返回true。于是调用同步退出就在这里终止。
问题的解决办法:
知道了原因要想解决就很容易了,主要有两种。保险一点的方法是到ps_member_synlogout里面给那个空的数组随便增加一个元素。第二种就是去掉empty($this->data)这个判断。