【问题标题】:session error in codeigniter?codeigniter中的会话错误?
【发布时间】:2015-06-25 06:08:42
【问题描述】:

当我想在 codeigniter 3 中设置会话数据时,它会显示如下错误:

A PHP Error was encountered

Severity: Warning

Message: mkdir(): Invalid path

Filename: drivers/Session_files_driver.php

Line Number: 117

Backtrace:

File: C:\xampp\htdocs\ci-test\application\controllers\login.php
Line: 7
Function: __construct

File: C:\xampp\htdocs\ci-test\index.php
Line: 292
Function: require_once

这里是要设置会话数据的代码。

$sess_array = array(
         'id' => 1,
         'username' => 'bikramkc.kc@gmail.com'
       );
$this->session->set_userdata($sess_array);

【问题讨论】:

  • 你需要在你的控制器中检查这个负载$this->load->library('session');
  • 更新您的完整代码
  • 你的第 117 行是什么??
  • 我猜第 117 行是指 CI 附带的 php 会话驱动程序。我在安装时看到了类似的东西。

标签: php codeigniter session


【解决方案1】:

分享一个对我有帮助的解决方案,尝试设置您的配置变量,例如:

$config['sess_save_path'] = sys_get_temp_dir();

【讨论】:

  • Ion Auth 应在尝试执行操作之前验证此路径并使所有应用程序崩溃。
  • 默认设置下,这个变量设置为NULL,改成sys_get_temp_dir()即可;
  • 我认为这行不通,但确实行得通。你怎么知道的?
  • 它确实给出了这个信息的错误。当我们使用基于目录的会话方法时会出现此错误。使用基于数据库的会话方法错误将会消失。
【解决方案2】:

当我们在 CodeIgniter 中使用基于目录的会话方法时会出现此错误。如果我们使用基于数据库的会话方法,就会出错。使用下面的代码 -

更改您的应用程序->config->config.php 并设置

$config['sess_driver'] = 'database';
$config['sess_cookie_name'] = 'ci_session';
$config['sess_expiration'] = 7200;
$config['sess_save_path'] = 'ci_sessions';
$config['sess_match_ip'] = FALSE;
$config['sess_time_to_update'] = 300;
$config['sess_regenerate_destroy'] = FALSE;

& 运行 SQL 查询

CREATE TABLE IF NOT EXISTS `ci_sessions` (
        `id` varchar(40) NOT NULL,
        `ip_address` varchar(45) NOT NULL,
        `timestamp` int(10) unsigned DEFAULT 0 NOT NULL,
        `data` blob NOT NULL,
        PRIMARY KEY (id),
        KEY `ci_sessions_timestamp` (`timestamp`)
);

【讨论】:

    【解决方案3】:

    config.php 中的sess_save_path 应该是sys_get_temp_dir(); 会解决mkdir(): Invalid path 的错误

    【讨论】:

      【解决方案4】:

      您遇到错误的原因是因为您没有$config['sess_save_path']

      去找你config.php并设置

      $config['sess_save_path'] = NULL;
      

      【讨论】:

      • thanx 但已经有 $config['sess_save_path'] = NULL;在 config.php 中设置
      • okk 尝试将其设置在类似$config['sess_save_path'] = BASEPATH . 'yourfoldername/cache/';的路径上
      【解决方案5】:

      1.打开application/config文件夹下的config.php

      2. 一直浏览到$config['sess_save_path'] = NULL; 行。

      3.将NULL的值改为BASEPATH.'sessions'

      【讨论】:

        【解决方案6】:

        这可能与 PHP 和 codeIgniter 版本有关。 对我来说,PHP 7.1.25 和 CI 3.0.4 不起作用。您可以使用 session_id() 检查。会话已刷新。 使用 CI 3.1.2 它可以工作。

        【讨论】:

          【解决方案7】:

          在你的 config.php 中试试这个 $config['sess_save_path'] = NULL

          【讨论】:

            【解决方案8】:
            1. 在配置文件中使用$config['sess_save_path'] 的绝对路径。
            2. 将其指向您的可写临时目录。
            3. 确保该目录位于 apache 或 nginx 配置中允许的目录下。

            【讨论】:

              【解决方案9】:

              如果$config['sess_save_path']sys_get_temp_dir(),那么会话数据将存储在系统文件夹中。

              如果你的数据库表为 ci_sessions 并带有以下 config.php:

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

              数据将存储在数据库中。在这种情况下你可以$config['sess_save_path'] = NULL;

              【讨论】:

                【解决方案10】:

                我有一个类似的案例,我在 godaddy 中有一个多主机,首先我更正了 .htacces 文件

                <IfModule mod_rewrite.c>
                    RewriteEngine On
                    RewriteBase / 
                
                    RewriteCond %{REQUEST_URI} ^system.*
                    RewriteRule ^(.*)$ /index.php?/$1 [L]
                
                    RewriteCond %{REQUEST_URI} ^application.*
                    RewriteRule ^(.*)$ /index.php?/$1 [L]
                
                    RewriteCond %{REQUEST_FILENAME} !-f
                    RewriteCond %{REQUEST_FILENAME} !-d
                    RewriteRule ^(.*)$ index.php?/$1 [L]
                </IfModule>
                
                <IfModule !mod_rewrite.c> 
                    ErrorDocument 404 /index.php
                </IfModule>
                

                然后更正文件config.php

                $config['sess_driver'] = 'files';
                $config['sess_cookie_name'] = 'ci_session';
                $config['sess_expiration'] = 7200;
                $config['sess_save_path'] = sys_get_temp_dir();
                $config['sess_match_ip'] = FALSE;
                $config['sess_time_to_update'] = 300;
                $config['sess_regenerate_destroy'] = FALSE;
                

                【讨论】:

                猜你喜欢
                • 1970-01-01
                • 2017-09-22
                • 1970-01-01
                • 2016-10-14
                • 2012-10-07
                • 2018-04-07
                • 2017-02-13
                • 2013-02-08
                • 1970-01-01
                相关资源
                最近更新 更多