在wordpress上创建cookie后调用

时间:2016-04-21 15:25:53

标签: php wordpress cookies hook

想要在创建logged_in cookie之后调用函数,但我的代码存在问题。

我覆盖了可插入函数wp_set_auth_cookie并在创建cookie之后添加了一个钩子:

function wp_set_auth_cookie( $user_id, $remember = false, $secure = '', $token = '' ) {
//SOME INTERESTING CODE //
    /**
     * Fires immediately before the secure authentication cookie is set.
     *
     * @since 2.6.0
     *
     * @param string $logged_in_cookie The logged-in cookie.
     * @param int    $expire           Login grace period in seconds. Default 43,200 seconds, or 12 hours.
     * @param int    $expiration       Duration in seconds the authentication cookie should be valid.
     *                                 Default 1,209,600 seconds, or 14 days.
     * @param int    $user_id          User ID.
     * @param string $scheme           Authentication scheme. Default 'logged_in'.
     */
    do_action( 'set_logged_in_cookie', $logged_in_cookie, $expire, $expiration, $user_id, 'logged_in' );

    setcookie($auth_cookie_name, $auth_cookie, $expire, PLUGINS_COOKIE_PATH, COOKIE_DOMAIN, $secure, true);
    setcookie($auth_cookie_name, $auth_cookie, $expire, ADMIN_COOKIE_PATH, COOKIE_DOMAIN, $secure, true);
    setcookie(LOGGED_IN_COOKIE, $logged_in_cookie, $expire, COOKIEPATH, COOKIE_DOMAIN, $secure_logged_in_cookie, true);
    if ( COOKIEPATH != SITECOOKIEPATH )
        setcookie(LOGGED_IN_COOKIE, $logged_in_cookie, $expire, SITECOOKIEPATH, COOKIE_DOMAIN, $secure_logged_in_cookie, true);

    do_action( 'ic_logged_in_cookie_just_set');
}
endif;

正如您所看到的,在最后,我使用钩子“ ic_logged_in_cookie_just_set ”执行所有函数,所以通常,在创建cookie之后,它将执行我的函数。

但是有一个问题:使用cookie的钩子触发的函数无法访问cookie,所以我的远程应用程序将收到一个未定义的cookie而不是logged_in cookie。

我的远程应用程序正在运行,因为当我使用'init'执行我的操作时,它会正常工作。

我的代码:

class IC_Chat {

    public function __construct()
    {
        //add_action( 'init', array($this, 'ic_show_chat_bar'));
        add_action( 'ic_logged_in_cookie_just_set', array($this, 'ic_show_chat_bar'));
    }


    public function ic_show_chat_bar() {    
        //if(is_user_logged_in() && !is_admin()){
            $token = $this->askForToken();
        //} 
    }

    private function askForToken(){

        $url = 'http://10.1.1.232:4000/getToken';

        $cookieLoggedInName = "wordpress_logged_in_".md5( get_site_option("siteurl")) ;
        // If ext/hash is not present, compat.php's hash_hmac() does not support sha256.
            if (function_exists( 'hash' ) )
                $body = array("encryption" => "sha256");
            else 
                $body = array("encryption" => "sha1");

        $args = array(
            'user-agent' => 'Wordpress',
            'cookies' => array(
                $cookieLoggedInName =>$_COOKIE[$cookieLoggedInName]
            )
        );

        $resp = wp_remote_post( $url, $args );
        // $response_code = wp_remote_retrieve_response_message( $response );

        if ( is_wp_error($resp) ) {
            etc...
        }

    }   

}

我的钩子也工作,因为我在远程应用程序日志中收到了一篇http帖子。

那么我怎样才能解决问题,在创建cookie的时候执行我的函数?

0 个答案:

没有答案