【问题标题】:CodeIgniter - A session had already been started - ignoring session_start()CodeIgniter - 一个会话已经开始 - 忽略 session_start()
【发布时间】:2015-10-15 15:30:04
【问题描述】:

我不断收到此错误:

遇到了 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;
        }
    }
}
?>

【问题讨论】:

  • 也发布你的控制器
  • 编辑帖子以包含控制器

标签: php codeigniter session


【解决方案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');

【讨论】:

    【解决方案2】:

    当您的 PHP.INI 文件启用 session.autostart 时,会出现此问题。您需要通过以下方式关闭此功能:

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

    2. 将具有以下值的 .htaccess 文件放在 Web 目录的根目录中: php_flag session.auto_start 0

    希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-11-25
      • 2017-05-20
      • 1970-01-01
      • 2023-03-23
      • 1970-01-01
      • 1970-01-01
      • 2012-01-06
      相关资源
      最近更新 更多