用户模块 /modules/member/index.php function logout()javascript
首先PHPCMS的登出的代码里面有一句同步登出的语句:php
$synlogoutstr = $this->client->ps_member_synlogout();
这个同步登出的代码是这样的: modules/member/classes/client.class.php 大概第67行java
/** * 同步退出 * @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行app
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。因而调用同步退出就在这里终止。函数
问题的解决办法: ui
知道了缘由要想解决就很容易了,主要有两种。保险一点的方法是到ps_member_synlogout里面给那个空的数组随便增长一个元素。第二种就是去掉empty($this->data)这个判断。this