zoukankan      html  css  js  c++  java
  • phpcms用户退出却无法通知到ucenter的 BUG

    用户模块  /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)这个判断。

  • 相关阅读:
    20200924-5 四则运算试题生成,结对
    20200924-4 代码规范,结对要求
    20200929-git地址
    20200917-1 每周例行报告
    20200917-3白名单
    20200917-2 词频统计
    20200910-1 每周例行报告
    20200910-2 博客作业
    20200924-3 单元测试,结对
    20200924-5 四则运算试题生成,结对
  • 原文地址:https://www.cnblogs.com/swinm/p/4165466.html
Copyright © 2011-2022 走看看