消息:ini_set():会话处于活动状态。此时您不能更改会话模块的 ini 设置
Message: ini_set(): A session is active. You cannot change the session module's ini settings at this time
我用 codeigniter 创建了一个登录页面,但我收到 php 消息。
Message: ini_set(): A session is active. You cannot change the session module's ini settings at this time
如何解决这个问题?
查看 (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>
控制器(验证_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');
}
}
}
?>
控制器(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');
}
型号 (User.php)
<?php
/**
*扩展 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;
}
}
}
?>
该消息意味着您已经使用 session_start()
启动了一个会话,在该会话中您正在使用 ini_set()
来操作会话模块。如果您正在操作会话模块,则应在会话启动和激活之前完成。
admin.php
不需要这一行
session_start(); //need to call PHP's session object to access it though it
当您加载会话库时,其构造函数会为您执行此操作。
消息:ini_set():会话处于活动状态。您目前无法更改会话模块的 ini 设置
我前段时间收到了同样的错误消息,在我的情况下,默认情况下代码点火器将写入文件 (C:\xampp\tmp)。但我希望它改为写入数据库。
在你的自动加载器中你可能有这样的东西:
//:::::$autoload['libraries'] = array();
//'session', this mean start session ini_set()
$autoload['libraries'] = array('session', 'database');
config/config.php 会话配置中的默认设置如下所示:
$config['sess_driver'] = 'files';
$config['sess_cookie_name'] = 'ci_session';
$config['sess_expiration'] = 7200;
$config['sess_save_path'] = NULL;
$config['sess_match_ip'] = FALSE;
$config['sess_time_to_update'] = 300;
$config['sess_regenerate_destroy'] = FALSE;
documentation 声明要使用数据库而不是文件,您应该首先在应用程序数据库中创建一个 table。
CREATE TABLE IF NOT EXISTS `ci_sessions` (
`id` varchar(128) NOT NULL,
`ip_address` varchar(45) NOT NULL,
`timestamp` int(10) unsigned DEFAULT 0 NOT NULL,
`data` blob NOT NULL,
KEY `ci_sessions_timestamp` (`timestamp`)
);
返回 config/config.php 并将 $config['sess_driver'] = 'files';
更改为 $config['sess_driver'] = 'database';
就像这样,我认为一切都应该没问题,但我收到错误 消息:ini_set():会话处于活动状态。您目前无法更改会话模块的 ini 设置
我的解决方案是首先 运行 session_destroy();
然后更改会话名称和 table 名称
我的配置如下所示:
$config['sess_driver'] = 'database';
$config['sess_cookie_name'] = 'newname_session';
$config['sess_expiration'] = 72000;
$config['sess_save_path'] ='newname_sessions';
$config['sess_match_ip'] = TRUE;
$config['sess_time_to_update'] = 300;
$config['sess_regenerate_destroy'] = FALSE;
保存所有内容,刷新页面后全部清除,没有显示错误消息
- 转到文件 \system\libraries\Session\Session。
- 在第 143 行取消注释 session_start(),您就完成了。
您可以在需要时仅通过 运行 命令来处理此问题,如下所示:
if (!isset($_SESSION)
&& !headers_sent()
) {
session_start();
}
这对我来说真的很管用
if (!isset($_SESSION)) {
// server should keep session data for AT LEAST 24 hour
ini_set('session.gc_maxlifetime', 60 * 60 * 24);
// each client should remember their session id for EXACTLY 24 hour
session_set_cookie_params(60 * 60 * 24);
session_start();
}
所以你在调用 ini_set 和 session_set_cookie_params 等之后开始你的会话
这对我有用:
if (!isset($_SESSION)) {
// server should keep session data for AT LEAST 24 hour
ini_set('session.gc_maxlifetime', 60 * 60 * 24);
session_start();
// each client should remember their session id for EXACTLY 24 hour
session_set_cookie_params(60 * 60 * 24);
}
我用 codeigniter 创建了一个登录页面,但我收到 php 消息。
Message: ini_set(): A session is active. You cannot change the session module's ini settings at this time
如何解决这个问题?
查看 (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>
控制器(验证_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');
}
}
}
?>
控制器(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');
}
型号 (User.php)
<?php
/** *扩展 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;
}
}
}
?>
该消息意味着您已经使用 session_start()
启动了一个会话,在该会话中您正在使用 ini_set()
来操作会话模块。如果您正在操作会话模块,则应在会话启动和激活之前完成。
admin.php
不需要这一行session_start(); //need to call PHP's session object to access it though it
当您加载会话库时,其构造函数会为您执行此操作。
消息:ini_set():会话处于活动状态。您目前无法更改会话模块的 ini 设置
我前段时间收到了同样的错误消息,在我的情况下,默认情况下代码点火器将写入文件 (C:\xampp\tmp)。但我希望它改为写入数据库。
在你的自动加载器中你可能有这样的东西:
//:::::$autoload['libraries'] = array();
//'session', this mean start session ini_set()
$autoload['libraries'] = array('session', 'database');
config/config.php 会话配置中的默认设置如下所示:
$config['sess_driver'] = 'files';
$config['sess_cookie_name'] = 'ci_session';
$config['sess_expiration'] = 7200;
$config['sess_save_path'] = NULL;
$config['sess_match_ip'] = FALSE;
$config['sess_time_to_update'] = 300;
$config['sess_regenerate_destroy'] = FALSE;
documentation 声明要使用数据库而不是文件,您应该首先在应用程序数据库中创建一个 table。
CREATE TABLE IF NOT EXISTS `ci_sessions` (
`id` varchar(128) NOT NULL,
`ip_address` varchar(45) NOT NULL,
`timestamp` int(10) unsigned DEFAULT 0 NOT NULL,
`data` blob NOT NULL,
KEY `ci_sessions_timestamp` (`timestamp`)
);
返回 config/config.php 并将 $config['sess_driver'] = 'files';
更改为 $config['sess_driver'] = 'database';
就像这样,我认为一切都应该没问题,但我收到错误 消息:ini_set():会话处于活动状态。您目前无法更改会话模块的 ini 设置
我的解决方案是首先 运行 session_destroy();
然后更改会话名称和 table 名称
我的配置如下所示:
$config['sess_driver'] = 'database';
$config['sess_cookie_name'] = 'newname_session';
$config['sess_expiration'] = 72000;
$config['sess_save_path'] ='newname_sessions';
$config['sess_match_ip'] = TRUE;
$config['sess_time_to_update'] = 300;
$config['sess_regenerate_destroy'] = FALSE;
保存所有内容,刷新页面后全部清除,没有显示错误消息
- 转到文件 \system\libraries\Session\Session。
- 在第 143 行取消注释 session_start(),您就完成了。
您可以在需要时仅通过 运行 命令来处理此问题,如下所示:
if (!isset($_SESSION)
&& !headers_sent()
) {
session_start();
}
这对我来说真的很管用
if (!isset($_SESSION)) {
// server should keep session data for AT LEAST 24 hour
ini_set('session.gc_maxlifetime', 60 * 60 * 24);
// each client should remember their session id for EXACTLY 24 hour
session_set_cookie_params(60 * 60 * 24);
session_start();
}
所以你在调用 ini_set 和 session_set_cookie_params 等之后开始你的会话
这对我有用:
if (!isset($_SESSION)) {
// server should keep session data for AT LEAST 24 hour
ini_set('session.gc_maxlifetime', 60 * 60 * 24);
session_start();
// each client should remember their session id for EXACTLY 24 hour
session_set_cookie_params(60 * 60 * 24);
}