警告:array_key_exists。如何解决这个警告?

时间:2013-05-05 08:50:47

标签: session authentication hybridauth array-key array-key-exists

我正在使用Hybridauth社交登录,并且在用户通过Facebook验证时,我收到以下错误:

  

警告:array_key_exists()[function.array-key-exists]:第二个   参数应该是数组或对象   第1328行/hybridauth/Hybrid/thirdparty/Facebook/base_facebook.php

我猜测(可能是错误的)为什么会发生这种情况是因为用于传递给Hybridauth的参数来自浏览器网址,而且我有两个页面= register& connected_with =主页。 Hybridauth只需要第二个......

它实际上是验证,但我想摆脱这个错误。为什么会出现此警告?有没有办法隐藏它?

这是错误的一点:

 /**
   * Get the base domain used for the cookie.
   */
  protected function getBaseDomain() {
    // The base domain is stored in the metadata cookie if not we fallback
    // to the current hostname
    $metadata = $this->getMetadataCookie();
    if (array_key_exists('base_domain', $metadata) &&
        !empty($metadata['base_domain'])) {
      return trim($metadata['base_domain'], '.');
    }
    return $this->getHttpHost();
  }
编辑:抱歉,警告来自此代码:

  /**
   * Destroy the current session
   */
  public function destroySession() {
    $this->accessToken = null;
    $this->signedRequest = null;
    $this->user = null;
    $this->clearAllPersistentData();

    // Javascript sets a cookie that will be used in getSignedRequest that we
    // need to clear if we can
    $cookie_name = $this->getSignedRequestCookieName();
    if (array_key_exists($cookie_name, $_COOKIE)) {
      unset($_COOKIE[$cookie_name]);
      if (!headers_sent()) {
        $base_domain = $this->getBaseDomain();
        setcookie($cookie_name, '', 1, '/', '.'.$base_domain);
      } else {
        // @codeCoverageIgnoreStart
        self::errorLog(
          'There exists a cookie that we wanted to clear that we couldn\'t '.
          'clear because headers was already sent. Make sure to do the first '.
          'API call before outputing anything.'
        );
        // @codeCoverageIgnoreEnd
      }
    }
  }

1 个答案:

答案 0 :(得分:1)

看起来getMetadataCookie()并不总是返回数组,可能是因为尚未设置cookie。在使用它之前,您可能想要检查它实际上是一个数组;

if (is_array($metadata) && array_key_exists('base_domain', $metadata) &&

编辑:您添加了更多代码,新代码中的代码同样适用于array_key_exists()。如果您不确定如果未设置cookie,它是否实际设置为数组,请先检查。