$ _SESSION在codeigniter的控制器中给出了错误

时间:2016-05-19 07:33:48

标签: php codeigniter

我在codeigniter中使用Facebook登录身份验证。我已将facebook sdk文件夹放在网站的根目录中,并在视图中使用它,如下所示:

<?php
session_start();
include_once("fblogin/config.php");
include_once("fblogin/includes/functions.php");


if(!$fbuser){
    $fbuser = null;
    $loginUrl = $facebook->getLoginUrl(array('redirect_uri'=>$homeurl,'scope'=>$fbPermissions));

}
else{
    $user_profile = $facebook->api('/me?fields=id,first_name,last_name,email,gender,locale,picture');
    $user = new Users();
    $user_data = $user->checkUser('facebook',$user_profile['id'],$user_profile['first_name'],$user_profile['last_name'],$user_profile['email'],$user_profile['gender'],$user_profile['locale'],$user_profile['picture']['data']['url']);

    $_SESSION['email'] = $user_profile['email'];
    header('Location:/music/profile');

    } 

?>

如果您仔细查看代码,我已在会话变量中添加了用户电子邮件。现在我想在我的控制器中访问此会话变量。我首先尝试两种方式:

我的控制器构造函数

 function __construct()
    {

        parent::__construct();

        $this->load->helper('url');
        $this->load->helper('form');
        $this->load->library("session");
        $this->load->model("Profile_model");
    }

public function index()
    {
        session_start();
        $name['name'] = $this->session->userdata("name");
        $name['email'] = $this->session->userdata($_SESSION['email']);
        $this->load->view('Profile_view', $name);

    }

这给了我一个会话已经启动的错误:

  

忽略session_start();和未定义的索引:电子邮件

我使用的第二种方式是:

public function index()
    {
        session_start();
        $name['name'] = $this->session->userdata("name");
        $name['email'] = $_SESSION['email'];
        $this->load->view('Profile_view', $name);

    }

这也给我同样的错误。

3 个答案:

答案 0 :(得分:0)

看起来电子邮件未在$ user_profile中收到,请尝试使用包含在应用开发者列表中的Facebook帐户进行测试。

答案 1 :(得分:0)

尝试从会话中获取名称和电子邮件后,您的视图会加载。尝试首先在设置会话变量的位置加载视图,然后从会话

中获取值

答案 2 :(得分:0)

您只需像这样调用用户数据

即可
$name['email'] = $this->session->userdata('email');

因为你已经存储了它。在facebook.php中你已经开始了一个会话,所以你想再次开始一个会话。