You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

000webhost部署后出现ini_set会话警告,本地正常求助

CodeIgniter部署到000webhost后出现Session相关PHP警告

遇到PHP错误
级别:警告
消息:ini_set(): A session is active. You cannot change the session module's ini settings at this time
文件路径:Session/Session.php
行号:282
回溯信息:
文件:/storage/ssd2/495/19547495/public_html/application/controllers/Auth.php
行号:8
函数:__construct
文件:/storage/ssd2/495/19547495/public_html/index.php
行号:316
函数:require_once

本地环境运行完全正常,但部署到000webhost后触发上述警告,导致网站无法正常访问。

相关代码片段

Session.php(报错行附近代码)

isset($params['cookie_name']) OR $params['cookie_name'] = config_item('sess_cookie_name');
if (empty($params['cookie_name']))
{
    $params['cookie_name'] = ini_get('session.name');
}
else
{
    ini_set('session.name', $params['cookie_name']);
}

isset($params['cookie_path']) OR $params['cookie_path'] = config_item('cookie_path');

isset($params['cookie_domain']) OR $params['cookie_domain'] = config_item('cookie_domain');
isset($params['cookie_secure']) OR $params['cookie_secure'] = (bool) config_item('cookie_secure');

session_set_cookie_params(
    $params['cookie_lifetime'],
    $params['cookie_path'],
    $params['cookie_domain'],
    $params['cookie_secure'],
    TRUE // HttpOnly; Yes, this is intentional and not configurable for security reasons
);

Auth.php(构造函数部分)

<?php
 defined('BASEPATH') or exit('No direct script access allowed');
 
 class Auth extends CI_Controller
 {
 public function __construct()
   {
 parent::__construct();
     $this->load->library('form_validation');
     $this->load->model('Auth_model');
   }

index.php(加载引导文件部分)

define('VIEWPATH', $view_folder.DIRECTORY_SEPARATOR);
 
 /*
  * -------------------------------------------------------------------
 LOAD THE BOOTSTRAP FILE
  * -------------------------------------------------------------------
  *
 And away we go...
  */
 require_once BASEPATH.'core/CodeIgniter.php';

解决方法

问题根源是000webhost服务器默认提前激活了Session,而CodeIgniter的Session库初始化时尝试修改Session配置,此时Session已处于激活状态,触发警告。以下是三种可行方案:

  • 方案1:对齐Session名称配置
    打开application/config/config.php,找到Session配置项:

    $config['sess_cookie_name'] = 'ci_session';
    

    先在index.php顶部添加测试代码,查看服务器默认的Session名称:

    echo ini_get('session.name'); exit;
    

    部署后访问网站,记下输出值,将$config['sess_cookie_name']修改为该值,再删除测试代码。这样Session库不会执行ini_set操作,避免警告。

  • 方案2:禁用服务器自动启动Session
    在网站根目录创建或修改.htaccess文件,添加以下规则:

    php_flag session.auto_start off
    

    强制关闭服务器自动启动Session的机制,让CodeIgniter完全控制Session初始化流程。

  • 方案3:修改Session库代码(不推荐,会影响框架升级)
    找到Session/Session.php的报错代码块,在执行ini_set前判断Session是否已激活:

    else
    {
        if(session_status() !== PHP_SESSION_ACTIVE) {
            ini_set('session.name', $params['cookie_name']);
        }
    }
    

    仅当Session未激活时修改配置,规避警告触发条件。

内容的提问来源于stack exchange,提问作者Muhaemin Nurhidayat

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 12:55:20