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)这个判断。

  • 相关阅读:
    每日口语(6.12)
    The usage of thumb
    Chart相关网站
    每日口语(6.14)
    我为世界杯狂
    一个很简单的javascript问题,看你能否答对
    【转】理解伪元素:Before和:After
    JS BOM之location.hash详解
    JS BOM之location对象
    JS BOM之location.hash的用法
  • 原文地址:https://www.cnblogs.com/swinm/p/4165466.html
Copyright © 2011-2022 走看看