消息:ini_set():会话处于活动状态.您此时无法更改会话模块的 ini 设置 [英] Message: ini_set(): A session is active. You cannot change the session module's ini settings at this time

查看:50
本文介绍了消息:ini_set():会话处于活动状态.您此时无法更改会话模块的 ini 设置的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我使用 codeigniter 创建了一个登录页面,但我收到了 php 消息.

消息:ini_set():会话处于活动状态.您此时无法更改会话模块的 ini 设置

如何解决这个问题?

查看(login.php)

<html lang="zh-cn"><头><meta charset="UTF-8"><title>管理员登录</title><link rel="stylesheet" href="../css/normalize.css"><link rel="stylesheet" href="../css/admin-style.css"><身体><?php echo form_open('Verify_login', ['id'=>'loginForm', 'name'='loginForm', 'method'=>'post']) ?><div class="登录"><div class="log-box"><h3>登录</h3><div ><input id="username" name="username" placeholder="用户名" value="" type="text" ><?php echo form_error('用户名');?><input id="Password" name="password" placeholder="Password" required type="password"><?php echo form_error('password');?><div class="remember-me"><input id="checkBox" type="checkbox"><label for="checkBox">记住我</label>

<button class="login-button" name="loginButton">登录</button>

</表单></html>

控制器(Verify_login.php)

load->model('User');$this->load->helper('url');$this->load->helper('security');$this->load->library('form_validation');$this->load->library('session');}公共函数索引(){$this->form_validation->set_rules('username', 'Username', 'trim|required');$this->form_validation->set_rules('password', 'Password', 'trim|required|callback_check_database');if ($this->form_validation->run() == FALSE) {//如果验证失败加载视图$this->load->view('admin/login');}别的{$this->check_database($username, $password);重定向('仪表板','刷新');}}公共函数 check_database($password){$username = $this->input->post('username');//查询数据库$result = $this->User->login($username, $password);如果($结果){$sess_array = [];foreach ($result as $row) {$sess_array =['id'=>$row->id,'用户名'=>$row->name];$this->session->set_userdata('logged_in', $sess_array);}返回真;}别的{$this->form_validation->set_message('check_database','invalid username and password');}}}?>

控制器(Admin.php)

session_start();//需要调用PHP的会话对象来访问它虽然它类 Admin 扩展了 CI_Controller{公开 $data;公共函数 __construct(){parent::__construct();$this->load->helper('url');$this->load->helper('form');$this->load->helper('url');$this->load->library('form_validation');$this->load->helper('security');//加载用户模型$this->load->model('User');}公共函数索引(){//$this->load->view('admin/index');if ($this->session->userdata('logged_in')) {$session_data = $this->session->userdata('logged_in');$data['username'] = $session_data['name'];$this->load->view('admin/dashboard', $data);}别的{//如果没有会话重定向到登录页面重定向('管理员','刷新');//重定向('登录');}}公共函数注销(){$this->session->unset_userdata('logged_in');session_destroy();重定向('家','刷新');}

模型(User.php)

/***扩展MY_Model的用户登录类**/

defined('BASEPATH') OR exit('不允许直接脚本');类用户扩展 CI_Model{受保护的 $table = '用户';公共函数 __construct(){$this->load->database();}公共功能登录($用户名,$密码){var_dump($username);var_dump($password);$this->db->select(['id', 'name', 'password']);$this->db->from($this->table);//$this->db->where('name', $username);//$this->db->where('password', $password);$this->db->limit(1);$query = $this->db->get();如果 ($query->num_rows() == 1) {返回 $query->result();}别的{返回假;}}}?>

解决方案

admin.php

中不需要这一行

session_start();//需要调用PHP的会话对象来访问它虽然它

当您加载会话库时,其构造函数会为您执行此操作.

I created a login page with codeigniter,but i get the php message.

Message: ini_set(): A session is active. You cannot change the session module's ini settings at this time

how to fix this?

view (login.php)

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Admin Login</title>
<link rel="stylesheet" href="../css/normalize.css">
<link rel="stylesheet" href="../css/admin-style.css">
</head>
<body>
    <?php echo form_open('Verify_login', ['id'=>'loginForm', 'name'=>'loginForm', 'method'=>'post']) ?>
    <div class="login">
        <div class="log-box">
            <h3>Login</h3>
            <div >
                  <input id="username" name="username" placeholder="User Name" value="" type="text" >
                <?php echo form_error('username'); ?>
                <input id="Password" name="password" placeholder="Password" required type="password">
                <?php echo form_error('password'); ?>
                <div class="remember-me">
                    <input id="checkBox" type="checkbox">
                    <label for="checkBox">Remember Me</label>
                </div>
                <button class="login-button" name="loginButton">Login</button>
            </div>
        </div>
    </div>
 </form>
</body>
</html>

controller (Verify_login.php)

<?php 
defined('BASEPATH') OR exit('No direct script access aloowed');

class Verify_login extends CI_Controller
{

public function __construct()
{
    parent::__construct();
    $this->load->model('User');
    $this->load->helper('url');
    $this->load->helper('security');
    $this->load->library('form_validation');
    $this->load->library('session');
}

public function index()
{
    $this->form_validation->set_rules('username', 'Username', 'trim|required');
    $this->form_validation->set_rules('password', 'Password', 'trim|required|callback_check_database');
    if ($this->form_validation->run() == FALSE) {
        // if validation failed load the view 
        $this->load->view('admin/login');
    }

    else{
        $this->check_database($username , $password);
        redirect('dashboard', 'refresh');
    }
}

public function check_database($password)
{
    $username = $this->input->post('username');

    //query tha database
    $result = $this->User->login($username, $password);

    if ($result) {
        $sess_array = [];
        foreach ($result as $row) {
            $sess_array = 
                [
                    'id'=>$row->id,
                    'username'=>$row->name
                ];
            $this->session->set_userdata('logged_in', $sess_array);
        }
        return TRUE;
    }
    else{

        $this->form_validation->set_message('check_database','invalid username and password');
    }
  }
 }
?>

controller(Admin.php)

session_start(); //need to call PHP's session object to access it though it
class Admin extends CI_Controller
{

public $data;
public function __construct()
{
    parent::__construct();
    $this->load->helper('url');

    $this->load->helper('form');
    $this->load->helper('url');
    $this->load->library('form_validation');
    $this->load->helper('security');

    //load user model
    $this->load->model('User');

}
public function index()
{
    // $this->load->view('admin/index');
    if ($this->session->userdata('logged_in')) {

        $session_data = $this->session->userdata('logged_in');
        $data['username'] = $session_data['name'];
        $this->load->view('admin/dashboard', $data);
    }
    else{

        //if no session redirect to login page 
        redirect('admin', 'refresh');
        // redirect('login');
    }
}

public function logout()
{
    $this->session->unset_userdata('logged_in');
    session_destroy();
    redirect('home', 'refresh');
}

model (User.php)

<?php 

/** *user login claass which extends MY_Model * */

defined('BASEPATH') OR exit('no direct script allowed');

class User extends CI_Model
{
    protected $table = 'users';

    public function __construct()
    {
        $this->load->database();
    }

    public function login($username ,$password)
    {
        var_dump($username);
        var_dump($password);
        $this->db->select(['id', 'name', 'password']);
        $this->db->from($this->table);
        // $this->db->where('name', $username);
        // $this->db->where('password', $password);
        $this->db->limit(1);

        $query = $this->db->get();
        if ($query->num_rows() == 1) {
            return $query->result();
        }
        else{

            return false;
        }
    }
   }    
   ?>

解决方案

You don't need this line in admin.php

session_start(); //need to call PHP's session object to access it though it

When you load the session library, its constructor does this for you.

这篇关于消息:ini_set():会话处于活动状态.您此时无法更改会话模块的 ini 设置的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆