无法在codeigniter控制器中访问$ _SESSION变量

时间:2013-01-04 03:05:28

标签: php codeigniter session

我有一个用于验证用户的控制器,如下所示:

function index()
{
    if($this->input->post('username'))
    {
        $username=$this->input->post('username');
        $password=$this->input->post('password');
        $this->mstudents->verifyUser($username,$password);
        if(@$_SESSION['sutdentUsername']!=""){
        echo "success";
        }
        else
        {
            echo "error";
        }
    }
    else
    {
        echo "error";
    }

}

该函数由ajax在视图中调用如下:

$.post('<?PHP echo base_url();?>account/login/',{username:$("#username").val(),password:$("#password").val()},function(data){

        $("#loginButton").button('reset');
        if(data=="success")
        {
            window.location="<?PHP echo base_url();?>account/dashboard";
        }
        });

现在的问题是,当我尝试访问仪表板中的会话变量进行验证时,它会获得一个空白的$ _SESSION数组。可能是什么问题?

这是我的verifUser的模态代码:

function verifyUser($username,$password)
{
    $data=array();
    $this->db->where('email',$username);
    $this->db->where('password',$password);
    $this->db->where('status','active');
    $Q=$this->db->get('students');
    if($Q->num_rows()>0)
    {
        $row=$Q->row_array();       
        $_SESSION['sutdentUsername']=$row['email'];

    }
    else
    {
        $_SESSION['sutdentUsername']="";
    }
}

我在所有控制器的构造函数中的代码中都有这段代码:

function __construct()
{
    parent::__construct();
    session_start();
    print_r($_SESSION);

控制器的目录结构如下:

控制器: 帐户   -仪表板   -登录 其他控制器就在这里......

2 个答案:

答案 0 :(得分:4)

根据我的理解,你应该试试这个:

根据您是否自动加载会话库,我们需要包括:

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

然后你应该可以使用:

$this->session->set_userdata('some_name', 'some_value');

$session_id = $this->session->userdata('some_name');

我希望这与您的需求相同。

答案 1 :(得分:3)

因为您使用的是原生php会话,所以您需要首先使用session_start();将其放在index.php内,然后将其放在__construct()

中来启动会话