首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >CodeIgniter -已经启动了一个会话-忽略了session_start()

CodeIgniter -已经启动了一个会话-忽略了session_start()
EN

Stack Overflow用户
提问于 2015-10-15 15:30:04
回答 2查看 6.7K关注 0票数 0

我一直在犯这个错误:

遇到PHP错误 严重程度:通知 消息:会话已经启动-忽略session_start() 文件名: Session/Session.php 线路号码: 140

在具有以下代码的页面上:

代码语言:javascript
运行
复制
<body>
<p><a href="<?php echo site_url("Login_controller")?>">LOGIN</a><p> 
<?php echo $this->session->userdata('Username'); ?>
</body>

页面上没有session_start()。

我认为造成这种情况的唯一原因是在autoload.php中,我已经这样做了:

代码语言:javascript
运行
复制
$autoload['libraries'] = array('database','session');

是什么导致了这个错误?

编辑:登录控制器

代码语言:javascript
运行
复制
    <?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;
        }
    }
}
?>
EN

回答 2

Stack Overflow用户

发布于 2015-10-15 15:52:09

将此更改为

代码语言:javascript
运行
复制
$this->session->set_userdata('logged_in', $sess_array);

代码语言:javascript
运行
复制
$this->session->set_userdata($sess_array);

添加Codeigniter会话的示例

方法01

代码语言:javascript
运行
复制
$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

代码语言:javascript
运行
复制
$this->session->set_userdata('some_name', 'some_value');
// $this->session->set_userdata('my_name', 'user3574766');
票数 1
EN

Stack Overflow用户

发布于 2017-12-26 06:47:49

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

  1. 编辑您的PHP.INI文件并将其设置为off --或与您的网站托管提供商联系以完成此操作。
  2. 使用以下值将.htaccess文件放置在web目录的根目录中: php_flag session.auto_start 0

希望这能有所帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33152600

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档