codeigniter中的会话错误?

时间:2015-06-25 06:08:42

标签: php codeigniter session

当我想在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);

10 个答案:

答案 0 :(得分:137)

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

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

答案 1 :(得分:12)

更改您的应用 - > 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`)
);

答案 2 :(得分:6)

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

转到config.php并设置

$config['sess_save_path'] = NULL;

答案 3 :(得分:6)

在config.php sess_save_path应为sys_get_temp_dir();,然后它将解决mkdir(): Invalid path的错误

答案 4 :(得分:1)

可能是由于PHP和codeIgniter版本所致。 对我来说,PHP 7.1.25和CI 3.0.4无法正常工作。您可以使用session_id()进行检查。会话已刷新。 使用CI 3.1.2可以正常工作。

答案 5 :(得分:0)

在config.php中尝试此操作    $config['sess_save_path'] = NULL

答案 6 :(得分:0)

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

答案 7 :(得分:0)

如果$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;

答案 8 :(得分:0)

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

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

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

答案 9 :(得分:-1)

我有一个类似的案例,我在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;