在codeigniter(facebook集成)中单击注销链接后无法销毁会话

时间:2014-07-14 10:28:16

标签: facebook codeigniter

单击主页上的注销链接后,会话不会破坏。这是我的代码

 public function login()
        {


                    $config['appId'] = '405802852809513';
                    $appid=$config['appId'];
                    $config['secret'] = 'b873cf1c00e9e1554cb0eede34d252d5';
                    $secret=$config['secret'];
                    $this->load->library('facebook', $config);
                   $user = $this->facebook->getUser();

                    if ($user) {
                    try {
                        $user_profile = $this->facebook->api('/me');  print_r($user_profile);
                    } catch (FacebookApiException $e) {
                        error_log($e);
                        $user = null;
                    }
                    }
                    if ($user) {
                        echo"<br>";
                echo  $data['logoutUrl']=$this->facebook->getLogouturl(array("next"=>site_url('/user/logout')));
                    } else {
                        $scope = array(
                            'scope'         => 'email,offline_access,publish_stream,user_birthday,user_location,user_work_history,user_about_me,user_hometown'
                            );                        
                    $data['loginUrl'] = $this->facebook->getLoginUrl($scope);
                    }    
                    if ($user) {



                        $logoutUrl=$data['logoutUrl'] ;
                         $user_info = array(                   
                   'name'     => $user_profile["name"],
                   'app_id'=>$appid,
                   'secret'=>$secret,
                   'id'      =>$user_profile["id"],
                   'logoutUrl'=> $logoutUrl,

               );
            $this->load->library('session');
            $this->session->set_userdata($user_info); 

                        redirect('user/home')  ;                                  

                    } else {
                         $this->load->view('frm_login',$data);
                    }


        }

填写电子邮件和passoward后,用户将重定向到主页, home 方法将被调用

public function home(){
        $this->load->library('session');
        $user_info=$this->session->all_userdata();

        if(isset($user_info['name'])){

            $data['name']=$user_info['name'];   
            if(isset($user_info['logoutUrl']))$data['logoutUrl']=$user_info['logoutUrl'];       
            $this->load->view("home",$data);
        }
        else{
            redirect("user/login");
        }
    }

这是我的主页的视图

<html>
    <body>
    Welcome <?php echo $name;?>
    <?php
    if(isset($logoutUrl))
    {?>
    <a href="<?php echo $logoutUrl?>">Fb_Logout</a>

    <?php }
    else
    {?>
    <a href="<?php echo site_url().'/user/logout';?>">Logout</a>    
    <?php 
    }
    ?>


    </body>
    </html>

这是我的注销用于销毁会话但问题是该会话没有销毁。我尝试了一切来摧毁会话,但它仍然存在。 如果我在网址中调用用户/登录,那么它会直接显示我的主页,并在其上显示我的Facebook名称。如果会话被成功销毁,那么它必须显示facebook的登录屏幕,但是它没有显示出来。请帮助我在这里呆了差不多2天。您的回复非常受欢迎。

public function logout(){
  $this->load->library('session');
    $this->load->library('facebook', $config);
  $this->session->unset_userdata($user_info);
   $this->facebook->destroysession();
    $this->session->sess_destroy();
    redirect("user/login");
}

1 个答案:

答案 0 :(得分:0)

我不知道您使用class方法logout class。这是$this对吗? (否则看到内部使用session会很奇怪)。你class中有class个对象吗?您的session对象在class中有class的内容? session对象的sess_destroypublic方法吗?如果是,是logout()吗?如果是这样,它包含什么?另外,您在哪里调用{{1}}方法?它甚至被执行了吗?

这些应该是你应该问自己的问题。

This是关于如何在php中销毁会话的参考。