CodeIgniter - 会话已经启动 - 忽略session_start()

时间:2015-10-15 15:30:05

标签: php codeigniter session

我一直收到这个错误:

  

遇到PHP错误

     

严重性:注意

     

消息:会话已经启动 - 忽略session_start()

     

文件名:Session / Session.php

     

行号:140

在包含此代码的页面上:

<body>
<p><a href="<?php echo site_url("Login_controller")?>">LOGIN</a><p> 
<?php echo $this->session->userdata('Username'); ?>
</body>

页面上没有session_start()。

我能想到的唯一一件事就是在autoload.php中我做了这个:

$autoload['libraries'] = array('database','session');

导致此错误的原因是什么?

编辑:登录控制器

    <?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class Login_controller extends CI_Controller {
    function __construct()
    {
        parent::__construct();
        $this->load->model('User_model','',TRUE);
    }


    function index() //Default function that is run when this controller is called.//
    {
        $this->load->helper(array('form'));
        $this->load->view('Login_view');
    }


    function Login()
    {
        $this->load->library('form_validation'); 
        $this->form_validation->set_rules('Username', 'Username', 'trim|required');
        $this->form_validation->set_rules('Password', 'Password', 'trim|required|callback_CheckDatabase');

        if($this->form_validation->run() == FALSE)
        {
            $this->load->view('Login_view'); //Reloads the login view with validation errors if the login attempt is unsuccessful.//
        }

        else
        { 
            redirect('Home_controller'); //Redirect to the homepage on successful login attempt.//
        }
    }


    function CheckDatabase($password) //This function is only run when password validation is correct.//
    {
        $username = $this->input->post('Username'); //Sets the username as a $username.//
        $result = $this->User_model->Login($username, $password);

        if($result)
        {
            $sess_array = array();
            foreach($result as $row)
            {
                $sess_array = array( //Makes an array of the data to be stored in the session.//
                'UserID' => $row->UserID,
                'Username' => $row->Username
                );

                $this->session->set_userdata('logged_in', $sess_array); //Sets $sess_array as the session.//
            }

            return TRUE;
       }

        else //Ran if the username or password aren't matched in the CIUsers database. Returns error message.//
        {
            $this->form_validation->set_message('CheckDatabase', 'Invalid login details.');
            return false;
        }
    }
}
?>

2 个答案:

答案 0 :(得分:1)

将此更改为

$this->session->set_userdata('logged_in', $sess_array);

$this->session->set_userdata($sess_array);

添加Codeigniter会话的示例

方法01

$newdata = array(
                   'username'  => 'johndoe',
                   'email'     => 'johndoe@some-site.com',
                   'logged_in' => TRUE
               );
//$newdata = array(
//                   'UserID'    => $row->UserID,
//                   'Username'  => $row->Username,
//                   'logged_in' => TRUE
//               );

$this->session->set_userdata($newdata);

方法02

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

答案 1 :(得分:0)

当您的PHP.INI文件已打开session.autostart时,会发生此问题。你需要通过以下方式关闭它:

  1. 编辑您的PHP.INI文件并将其设置为关闭 - 或联系您的网络托管服务提供商为您执行此操作

  2. 使用以下值将.htaccess文件放在网络目录的根目录中: php_flag session.auto_start 0

  3. 希望这会有所帮助。