【问题标题】:Fatal error: session_start() after upgrading to Codeigniter 3致命错误:升级到 Codeigniter 3 后的 session_start()
【发布时间】:2016-01-27 11:04:18
【问题描述】:

我从 Codeigniter 2 升级到 3,现在我的 CAS 库出现此错误:

A PHP Error was encountered

Severity: Error

Message: session_start() [function.session-start]: Failed to initialize storage module: user (path: C:\Windows\Temp)

Filename: CAS/Client.php

Line Number: 3588

Backtrace:

它与会话有关,我猜CI3.0对它的处理与CI2.0不同。

我在 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

;

我们将不胜感激任何帮助。谢谢。

新:

我做了一个干净的 CI3.0.4 安装,问题似乎是 CAS 身份验证库: https://github.com/eliasdorneles/code-igniter-cas-library

它适用于 CI 2.x,但不适用于 CI3.0。如果我只是不加载 CAS 模块,那么关于会话的一切正常(我在设置会话等方面没有问题)。但是,一旦我加载了 CAS,CAS/Client.php 中的 session_start() 行就会出现问题。有什么想法吗?

【问题讨论】:

  • 您将会话文件写入C:\Windows\Temp 似乎有点奇怪。我的猜测是服务器无权访问此文件夹。
  • 你是怎么做的?你试过m answer吗?
  • 我已经用新信息更新了我的初始帖子,但问题仍然存在。
  • 更新了新的查询

标签: php codeigniter session cas


【解决方案1】:

你还没有配置你的 sess_save_path 确保文件夹也是 chmod 700

$config['sess_driver'] = 'files';
$config['sess_cookie_name'] = 'ci_session';
$config['sess_expiration'] = 7200;
$config['sess_save_path'] = FCPATH . 'application/cache/';
$config['sess_match_ip'] = FALSE;
$config['sess_time_to_update'] = 300;
$config['sess_regenerate_destroy'] = FALSE;

自动加载会话

$autoload['libraries'] = array('session');

【讨论】:

    【解决方案2】:

    你可以试试下面的代码,它对我有用

    // before session_start();
    
    ini_set('session.save_handler', 'files'); 
    
    // make sure it is writeable
    
    ini_set('session.save_path', 'c:\temp');   
    
    session_start();
    

    【讨论】:

    • 您好,欢迎来到 StackOverflow。请格式化您的答案,以便代码更具可读性。
    【解决方案3】:

    我有同样的问题。 我已通过编辑库/Cas.php(第 55 行)并添加 false 参数以防止 phpCAS 启动会话本身来修复它 phpCAS::client(CAS_VERSION_2_0, $cas_url['host'], $cas_url['port'], $cas_url['path'], false);

    【讨论】:

      【解决方案4】:

      我已经解决了这个问题。打开phpCAS文件:CAS/Client.php。 转到大约第 3580 行(在“私有函数_renameSession”中)。

      修改

      session_start();
      

      if (! isset($_SESSION)) {
          session_start();
      }
      

      请原谅我的英语不好。

      【讨论】:

        【解决方案5】:
        $config['sess_driver'] = 'files';
        $config['sess_cookie_name'] = 'ci_session';
        $config['sess_expiration'] = 7200;
        $config['sess_save_path'] = '/tmp';
        $config['sess_match_ip'] = FALSE;
        $config['sess_time_to_update'] = 300;
        $config['sess_regenerate_destroy'] = FALSE;
        

        sess_save_path 服务器部分路径更改为/tmp

        $config['sess_save_path'] = '/tmp';

        【讨论】:

          猜你喜欢
          • 2014-09-22
          • 1970-01-01
          • 1970-01-01
          • 2015-07-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-04-13
          相关资源
          最近更新 更多