Codeigniter会话数据在重定向后丢失

时间:2022-11-23 20:44:32

I am using codeigniter 2.1.0.

我正在使用codeigniter 2.1.0。

I am trying to do a register/login function using the session library in the codeigniter.

我正在尝试使用codeigniter中的会话库进行注册/登录功能。

The register/login with the session library worked fine for localhost, but when I put it live and tried it, the session does not work.

对localhost来说,会话库的注册/登录可以正常工作,但是当我将它放入并尝试它时,会话就不能工作了。

My controller login works this way. I check the credentials, once ok I set my session data and redirect to another page.

我的控制器的登录方式是这样的。我检查凭证,一旦确定了会话数据并重定向到另一个页面。

$user_data = array(
                   'username'       => $result->user_name,
                   'email'          => $result->user_email,
                   'userid'         => $result->user_id,
                   'role'           => $result->user_role,
                   'login_state'    => TRUE,
                   'lastlogin'      => time(),
               );

$this->session->set_userdata($user_data);           
print_r( $this->session->all_userdata());            
redirect(base_url('dashboard'));

at this point here when I print all my session data, they do print out. But at the dashboard controller side, when i attempt to print the session data out, they were not there anymore.

此时,当我打印所有会话数据时,它们会输出。但是在仪表板控制器端,当我尝试打印会话数据时,它们已经不在了。

Any idea why? Thanks in advance for the help.

知道为什么吗?谢谢你的帮助。

14 个解决方案

#1


15  

I'm not sure what exactly is the problem. Recently I faced this too..

我不确定到底是什么问题。最近我也遇到过这种情况。

It was working before in my development running php7.0.

在我运行php7.0的开发中,它以前是可以工作的。

Currently it is only working in my production server running nginx and php 5.6. My development server seems to be not working and keeps on regenerate new row in sessions table. My development server is using php7.1, on homestead virtualbox development environment, usually being used for Laravel projects.

目前,它只在运行nginx和php 5.6的生产服务器上工作。我的开发服务器似乎不工作,并在sessions表中继续重新生成新行。我的开发服务器在homestead virtualbox开发环境中使用php7.1,通常用于Laravel项目。

I managed to get over this by taking this step.

我通过这一步克服了这个问题。

1) Go to system/libraries/Session/Session.php

1)系统/图书馆/会议/ Session.php

2) Comment session_start() by adding //. We want to relocate the sessionn_start().

2)通过添加//来注释session_start()。我们想重新定位sessionn_start()。

3) Go down to line 315 where it says Security is king, and comment out until line 351

3)到315行,上面写着安全为王,注释到351行

Codeigniter会话数据在重定向后丢失

4) Then go to your main index.php ( the root index.php )

然后查看你的主索引。php(根索引)。php)

5) Add session_start() at the top once.

5)在顶部添加session_start()。

Codeigniter会话数据在重定向后丢失

6) Okay try again. Hopefully it works. My guess is that it is not working with php 7.1 and some update need to be done in this Session.php file.

6)好了再试一次。希望它的工作原理。我的猜测是,它没有使用php 7.1,并且需要在这个会话中完成一些更新。php文件。

  1. My CI Version is 3.1.1
  2. 我的CI版本是3.1.1

Codeigniter会话数据在重定向后丢失

#2


3  

This is an addition to "edelweiss" answer but I feel like it require more attention and hence posting as answer.

这是“edelweiss”的一个补充,但我觉得它需要更多的关注,因此作为答案发布。

CI 2.1 is infamous to have session related problems. It is better we replace the built-in Sessions.php file with the one below.

CI 2.1因有会话相关的问题而臭名昭著。最好替换内置会话。php文件和下面的文件。

The link given by "edelweiss" is broken. The Session.php file he mentions is:

“雪绒花”提供的联系被打破了。会话。他提到的php文件是:

<?php  if (!defined('BASEPATH')) exit('No direct script access allowed');
//>  makes dw cs4 happy
/**
* Session class using native PHP session features and hardened against session fixation.
*
* @package     CodeIgniter
* @subpackage  Libraries
* @category    Sessions
* @author      Dariusz Debowczyk, Matthew Toledo
* @link        http://www.philsbury.co.uk/index.php/blog/code-igniter-sessions/
*/
class CI_Session {
    var $flashdata_key     = 'flash'; // prefix for "flash" variables (eg. flash:new:message)
    function CI_Session()
    {
        $this->object =& get_instance();
        log_message('debug', "Native_session Class Initialized");
        $this->_sess_run();
    }
    /**
    * Regenerates session id
    */
    function regenerate_id()
    {
        // copy old session data, including its id
        $old_session_id = session_id();
        $old_session_data = $_SESSION;
        // regenerate session id and store it
        session_regenerate_id();
        $new_session_id = session_id();
        // switch to the old session and destroy its storage
        session_id($old_session_id);
        session_destroy();
        // switch back to the new session id and send the cookie
        session_id($new_session_id);
        session_start();
        // restore the old session data into the new session
        $_SESSION = $old_session_data;
        // update the session creation time
        $_SESSION['regenerated'] = time();
        // session_write_close() patch based on this thread
        // http://www.codeigniter.com/forums/viewthread/1624/
        // there is a question mark ?? as to side affects
        // end the current session and store session data.
        session_write_close();
    }
    /**
    * Destroys the session and erases session storage
    */
    function destroy()
    {
        unset($_SESSION);
        if ( isset( $_COOKIE[session_name()] ) )
        {
            setcookie(session_name(), '', time()-42000, '/');
        }
        session_destroy();
    }
    /**
    * Alias for destroy(), makes 1.7.2 happy.
    */
    function sess_destroy()
    {
        $this->destroy();
    }
    /**
    * Reads given session attribute value
    */
    function userdata($item)
    {
        if($item == 'session_id'){ //added for backward-compatibility
            return session_id();
        }else{
            return ( ! isset($_SESSION[$item])) ? false : $_SESSION[$item];
        }
    }
    /**
    * Sets session attributes to the given values
    */
    function set_userdata($newdata = array(), $newval = '')
    {
        if (is_string($newdata))
        {
            $newdata = array($newdata => $newval);
        }
        if (count($newdata) > 0)
        {
            foreach ($newdata as $key => $val)
            {
                $_SESSION[$key] = $val;
            }
        }
    }
    /**
    * Erases given session attributes
    */
    function unset_userdata($newdata = array())
    {
        if (is_string($newdata))
        {
            $newdata = array($newdata => '');
        }
        if (count($newdata) > 0)
        {
            foreach ($newdata as $key => $val)
            {
                unset($_SESSION[$key]);
            }
        }
    }
    /**
    * Starts up the session system for current request
    */
    function _sess_run()
    {
        session_start();
        $session_id_ttl = $this->object->config->item('sess_expiration');
        if (is_numeric($session_id_ttl))
        {
            if ($session_id_ttl > 0)
            {
                $this->session_id_ttl = $this->object->config->item('sess_expiration');
            }
            else
            {
                $this->session_id_ttl = (60*60*24*365*2);
            }
        }
        // check if session id needs regeneration
        if ( $this->_session_id_expired() )
        {
            // regenerate session id (session data stays the
            // same, but old session storage is destroyed)
            $this->regenerate_id();
        }
        // delete old flashdata (from last request)
        $this->_flashdata_sweep();
        // mark all new flashdata as old (data will be deleted before next request)
        $this->_flashdata_mark();
    }
    /**
    * Checks if session has expired
    */
    function _session_id_expired()
    {
        if ( !isset( $_SESSION['regenerated'] ) )
        {
            $_SESSION['regenerated'] = time();
            return false;
        }
        $expiry_time = time() - $this->session_id_ttl;
        if ( $_SESSION['regenerated'] <=  $expiry_time )
        {
            return true;
        }
        return false;
    }
    /**
    * Sets "flash" data which will be available only in next request (then it will
    * be deleted from session). You can use it to implement "Save succeeded" messages
    * after redirect.
    */
    function set_flashdata($newdata = array(), $newval = '')
    {
        if (is_string($newdata))
        {
            $newdata = array($newdata => $newval);
        }
        if (count($newdata) > 0)
        {
            foreach ($newdata as $key => $val)
            {
                $flashdata_key = $this->flashdata_key.':new:'.$key;
                $this->set_userdata($flashdata_key, $val);
            }
        }
    }
    /**
    * Keeps existing "flash" data available to next request.
    */
    function keep_flashdata($key)
    {
        $old_flashdata_key = $this->flashdata_key.':old:'.$key;
        $value = $this->userdata($old_flashdata_key);
        $new_flashdata_key = $this->flashdata_key.':new:'.$key;
        $this->set_userdata($new_flashdata_key, $value);
    }
    /**
    * Returns "flash" data for the given key.
    */
    function flashdata($key)
    {
        $flashdata_key = $this->flashdata_key.':old:'.$key;
        return $this->userdata($flashdata_key);
    }
    /**
    * PRIVATE: Internal method - marks "flash" session attributes as 'old'
    */
    function _flashdata_mark()
    {
        foreach ($_SESSION as $name => $value)
        {
            $parts = explode(':new:', $name);
            if (is_array($parts) && count($parts) == 2)
            {
                $new_name = $this->flashdata_key.':old:'.$parts[1];
                $this->set_userdata($new_name, $value);
                $this->unset_userdata($name);
            }
        }
    }
    /**
    * PRIVATE: Internal method - removes "flash" session marked as 'old'
    */
    function _flashdata_sweep()
    {
        foreach ($_SESSION as $name => $value)
        {
            $parts = explode(':old:', $name);
            if (is_array($parts) && count($parts) == 2 && $parts[0] == $this->flashdata_key)
            {
                $this->unset_userdata($name);
            }
        }
    }
}

#3


2  

Maybe you not automatic load library session.

也许您没有自动加载库会话。

Have you try this in controller dashboard:

你在控制器仪表盘上试过这个吗?

$this->load->library('session');
print_r($this->session->all_userdata());

#4


2  

PHP 7 Upgrade - * Known SESSION / COOKIE Bug

PHP 7升级- *已知会话/ COOKIE错误

This answer addresses the known session/cookie bug - when you upgrade to PHP7 from PHP 5.

当您从PHP 5升级到PHP7时,这个答案解决了已知的会话/cookie错误。

If your CodeIgniter version is @ 3.1.0 or below - and you are upgrading to PHP 7.1 - You will need to update CodeIgniter.

如果您的CodeIgniter版本是@ 3.1.0或以下——并且您正在升级到PHP 7.1——您将需要更新CodeIgniter。

There is a bug with $this->session->set_userdata(); - that can be pretty annoying. It will overwrite your session as soon as you redirect or visit another page within your site structure.

有一个错误是$this->会话->set_userdata();-那可真烦人。当您重定向或访问站点结构中的另一个页面时,它将覆盖您的会话。


Some other discussions about the bug: https://github.com/bcit-ci/CodeIgniter/issues/4830

关于这个bug的一些其他讨论:https://github.com/bcit-ci/codeigniter/issues es/4830

*Save some time and see post by See post "dyanakiev commented on Oct 23, 2016" -

*节省时间,见帖子“dyanakiev在2016年10月23日评论”-。

"Just to confirm: Everything works perfect with 3.1.1, no more problems with sessions. ???? Good job! ????"

只是想确认一下:3.1.1版的所有功能都很完美,没有任何会话问题。????job!好????"


See upgrade instructions here: https://www.codeigniter.com/use…/installation/upgrading.html

请参阅这里的升级说明:https://www.codeigniter.com/use.3/installation/upgrading.html

Latest CodeIgniter Download here: https://codeigniter.com/download

最新的CodeIgniter下载:https://codeigniter.com/download

*I can also confirm this as well:

*我也可以确认:

Updating codeigniter to 3.1.6 fixed the session problem immediately - that had occurred after I updated server to PHP 7.1.*

将codeigniter更新为3.1.6立即修复了会话问题——这是在我将服务器更新为PHP 7.1之后发生的

#5


1  

Make sure your app has permissions to create the session files to /tmp (where file sessions are stored) if your not using a database for the sessions.

如果您没有为会话使用数据库,请确保您的应用程序有权限将会话文件创建到/tmp(存储文件会话的地方)。

More than likely you need to look at php.ini on the production server and verify the session save handler is defined http://devzone.zend.com/413/trick-out-your-session-handler/ explains this rather well.

您很可能需要查看php。在生产服务器上验证会话保存处理程序的ini定义为http://devzone.zend.com/413/trick-out- session-handler/。

#6


1  

I realize you're trying to debug your issue; but have you tried removing the echo/print before redirecting?

我知道你在调试你的问题;但是你试过在重定向之前移除回波/打印吗?

I'm no 'session' expert, but I've had similar issues where printing out debug information before redirecting would cause session data the die on the next page.

我不是“会话”专家,但我也遇到过类似的问题,在重定向之前打印调试信息会导致会话数据在下一页上消失。

Also, @edelweiss is on the money :)

此外,@edelweiss说道:

#7


0  

I saw a similar post and was directed to here to try using his sessions.php

我看到了一个类似的帖子,并被引导到这里尝试使用他的sessions.php。

And it works for me!

这对我很有效!

http://www.philsbury.co.uk/blog/code-igniter-sessions

http://www.philsbury.co.uk/blog/code-igniter-sessions

#8


0  

In My case, after some tests (with https and http in localhost) the error comes for that issue and not having properly set the $config['cookie_secure'], so you can try changing in config.php:

在我的例子中,经过一些测试(在localhost中使用https和http),出现了这个问题,并且没有正确设置$config['cookie_secure'],因此您可以尝试在config.php中进行更改:

$config['cookie_secure']    = FALSE; // if is not under https, or true if you use https

Cheers!

干杯!

#9


0  

Make sure you session_start() before using $_SESSION. I had this problem, I foolishly assumed that

在使用$_SESSION之前,请确保您的session_start()。我有这个问题,我愚蠢地认为。

$this->load->library('session');

$ this - > - >加载库(“会话”);

will do that for me, but not.

会为我做,但不会。

#10


0  

I was facing the same issue and after a long research I found the solution.

我面临着同样的问题,经过长时间的研究,我找到了解决方案。

My session is stored in db not in files but even database is also restricted to store the size, I think..

我的会话存储在db中而不是文件中,甚至数据库也被限制存储大小。

Its not any core issue of codeigniter or something that is session destroyed automatically or something else..

这不是任何代码点火器的核心问题,也不是自动销毁会话的问题。

It is actually the load of data amount in session, if we save the more & more data inside session with Codeigniter("I am not sure about native session but for codeigniter I can confirm this"), it will destroy the session automatically.

它实际上是会话中数据量的加载,如果我们使用Codeigniter将越来越多的数据保存在会话中(“我不确定是本机会话,但对于Codeigniter我可以确认这一点”),它将自动销毁会话。

So what you have to do is, to go to that code that you are writing to get the data from db or somewhere else and then saving into session in userdata, try to reduce the load of data saving inside the session and exclude that data which is not needed on page from session every time.

所以你要做的是,去,你写的代码从数据库或其他地方获得数据,然后在用户数据保存到会话,尽量减少负载的数据保存在会话和排除数据页不需要每次都从会话。

Let me know if still there is an issue..

如果还有什么问题,请告诉我。

#11


0  

This might be late. But felt i should drop it. Had same issue too. I m using codeigniter and wiredesignz hmvc and i noticed the error was from the htaccess. Try adding a back slash after the rewrite base url

这可能会迟到。但我觉得我应该放弃它。也有同样的问题。我正在使用codeigniter和wiredesignz hmvc,我注意到错误来自htaccess。尝试在重写基url之后添加反斜杠

#12


0  

In case someone get stuck using Homestead (as I was), this is a CodeIgniter bug and is not present on newer versions (I read), you can upgrade your CI version or downgrade your PHP version "per project" with Homestead 6+, as in the example:

如果有人使用Homestead(就像我一样),这是一个CodeIgniter bug,并没有出现在新版本(我阅读)中,您可以升级您的CI版本,或者将您的PHP版本“per project”降级为Homestead 6+,例如:

//Homestead.yaml
    - map: myproject.test
      to: /home/vagrant/Code/myproject
      php: "5.6"

and then simple run homestead provision.

然后是简单的宅基地供应。

#13


0  

I solved this issue by upgrading my codeigniter. Go to Codeigniter download

我通过升级codeigniter解决了这个问题。去Codeigniter下载

Download it and replace your project system folder with newly downloaded one.

下载并替换您的项目系统文件夹和新下载的一个。

#14


0  

if you are working in CI 3.x and just upgraded your server php version to php 7.x

如果你在CI 3工作。将您的服务器php版本升级到php 7.x。

Go to system/libraries/Session/session.php at Line no 281 and replace ini_set('session.name', $params['cookie_name']); by ini_set('session.id', $params['cookie_name']);

去系统/图书馆/会议/会议。在第281行替换ini_set('session.name', $params['cookie_name']]);报错(会话。id ",$ params[' cookie_name ']);

#1


15  

I'm not sure what exactly is the problem. Recently I faced this too..

我不确定到底是什么问题。最近我也遇到过这种情况。

It was working before in my development running php7.0.

在我运行php7.0的开发中,它以前是可以工作的。

Currently it is only working in my production server running nginx and php 5.6. My development server seems to be not working and keeps on regenerate new row in sessions table. My development server is using php7.1, on homestead virtualbox development environment, usually being used for Laravel projects.

目前,它只在运行nginx和php 5.6的生产服务器上工作。我的开发服务器似乎不工作,并在sessions表中继续重新生成新行。我的开发服务器在homestead virtualbox开发环境中使用php7.1,通常用于Laravel项目。

I managed to get over this by taking this step.

我通过这一步克服了这个问题。

1) Go to system/libraries/Session/Session.php

1)系统/图书馆/会议/ Session.php

2) Comment session_start() by adding //. We want to relocate the sessionn_start().

2)通过添加//来注释session_start()。我们想重新定位sessionn_start()。

3) Go down to line 315 where it says Security is king, and comment out until line 351

3)到315行,上面写着安全为王,注释到351行

Codeigniter会话数据在重定向后丢失

4) Then go to your main index.php ( the root index.php )

然后查看你的主索引。php(根索引)。php)

5) Add session_start() at the top once.

5)在顶部添加session_start()。

Codeigniter会话数据在重定向后丢失

6) Okay try again. Hopefully it works. My guess is that it is not working with php 7.1 and some update need to be done in this Session.php file.

6)好了再试一次。希望它的工作原理。我的猜测是,它没有使用php 7.1,并且需要在这个会话中完成一些更新。php文件。

  1. My CI Version is 3.1.1
  2. 我的CI版本是3.1.1

Codeigniter会话数据在重定向后丢失

#2


3  

This is an addition to "edelweiss" answer but I feel like it require more attention and hence posting as answer.

这是“edelweiss”的一个补充,但我觉得它需要更多的关注,因此作为答案发布。

CI 2.1 is infamous to have session related problems. It is better we replace the built-in Sessions.php file with the one below.

CI 2.1因有会话相关的问题而臭名昭著。最好替换内置会话。php文件和下面的文件。

The link given by "edelweiss" is broken. The Session.php file he mentions is:

“雪绒花”提供的联系被打破了。会话。他提到的php文件是:

<?php  if (!defined('BASEPATH')) exit('No direct script access allowed');
//>  makes dw cs4 happy
/**
* Session class using native PHP session features and hardened against session fixation.
*
* @package     CodeIgniter
* @subpackage  Libraries
* @category    Sessions
* @author      Dariusz Debowczyk, Matthew Toledo
* @link        http://www.philsbury.co.uk/index.php/blog/code-igniter-sessions/
*/
class CI_Session {
    var $flashdata_key     = 'flash'; // prefix for "flash" variables (eg. flash:new:message)
    function CI_Session()
    {
        $this->object =& get_instance();
        log_message('debug', "Native_session Class Initialized");
        $this->_sess_run();
    }
    /**
    * Regenerates session id
    */
    function regenerate_id()
    {
        // copy old session data, including its id
        $old_session_id = session_id();
        $old_session_data = $_SESSION;
        // regenerate session id and store it
        session_regenerate_id();
        $new_session_id = session_id();
        // switch to the old session and destroy its storage
        session_id($old_session_id);
        session_destroy();
        // switch back to the new session id and send the cookie
        session_id($new_session_id);
        session_start();
        // restore the old session data into the new session
        $_SESSION = $old_session_data;
        // update the session creation time
        $_SESSION['regenerated'] = time();
        // session_write_close() patch based on this thread
        // http://www.codeigniter.com/forums/viewthread/1624/
        // there is a question mark ?? as to side affects
        // end the current session and store session data.
        session_write_close();
    }
    /**
    * Destroys the session and erases session storage
    */
    function destroy()
    {
        unset($_SESSION);
        if ( isset( $_COOKIE[session_name()] ) )
        {
            setcookie(session_name(), '', time()-42000, '/');
        }
        session_destroy();
    }
    /**
    * Alias for destroy(), makes 1.7.2 happy.
    */
    function sess_destroy()
    {
        $this->destroy();
    }
    /**
    * Reads given session attribute value
    */
    function userdata($item)
    {
        if($item == 'session_id'){ //added for backward-compatibility
            return session_id();
        }else{
            return ( ! isset($_SESSION[$item])) ? false : $_SESSION[$item];
        }
    }
    /**
    * Sets session attributes to the given values
    */
    function set_userdata($newdata = array(), $newval = '')
    {
        if (is_string($newdata))
        {
            $newdata = array($newdata => $newval);
        }
        if (count($newdata) > 0)
        {
            foreach ($newdata as $key => $val)
            {
                $_SESSION[$key] = $val;
            }
        }
    }
    /**
    * Erases given session attributes
    */
    function unset_userdata($newdata = array())
    {
        if (is_string($newdata))
        {
            $newdata = array($newdata => '');
        }
        if (count($newdata) > 0)
        {
            foreach ($newdata as $key => $val)
            {
                unset($_SESSION[$key]);
            }
        }
    }
    /**
    * Starts up the session system for current request
    */
    function _sess_run()
    {
        session_start();
        $session_id_ttl = $this->object->config->item('sess_expiration');
        if (is_numeric($session_id_ttl))
        {
            if ($session_id_ttl > 0)
            {
                $this->session_id_ttl = $this->object->config->item('sess_expiration');
            }
            else
            {
                $this->session_id_ttl = (60*60*24*365*2);
            }
        }
        // check if session id needs regeneration
        if ( $this->_session_id_expired() )
        {
            // regenerate session id (session data stays the
            // same, but old session storage is destroyed)
            $this->regenerate_id();
        }
        // delete old flashdata (from last request)
        $this->_flashdata_sweep();
        // mark all new flashdata as old (data will be deleted before next request)
        $this->_flashdata_mark();
    }
    /**
    * Checks if session has expired
    */
    function _session_id_expired()
    {
        if ( !isset( $_SESSION['regenerated'] ) )
        {
            $_SESSION['regenerated'] = time();
            return false;
        }
        $expiry_time = time() - $this->session_id_ttl;
        if ( $_SESSION['regenerated'] <=  $expiry_time )
        {
            return true;
        }
        return false;
    }
    /**
    * Sets "flash" data which will be available only in next request (then it will
    * be deleted from session). You can use it to implement "Save succeeded" messages
    * after redirect.
    */
    function set_flashdata($newdata = array(), $newval = '')
    {
        if (is_string($newdata))
        {
            $newdata = array($newdata => $newval);
        }
        if (count($newdata) > 0)
        {
            foreach ($newdata as $key => $val)
            {
                $flashdata_key = $this->flashdata_key.':new:'.$key;
                $this->set_userdata($flashdata_key, $val);
            }
        }
    }
    /**
    * Keeps existing "flash" data available to next request.
    */
    function keep_flashdata($key)
    {
        $old_flashdata_key = $this->flashdata_key.':old:'.$key;
        $value = $this->userdata($old_flashdata_key);
        $new_flashdata_key = $this->flashdata_key.':new:'.$key;
        $this->set_userdata($new_flashdata_key, $value);
    }
    /**
    * Returns "flash" data for the given key.
    */
    function flashdata($key)
    {
        $flashdata_key = $this->flashdata_key.':old:'.$key;
        return $this->userdata($flashdata_key);
    }
    /**
    * PRIVATE: Internal method - marks "flash" session attributes as 'old'
    */
    function _flashdata_mark()
    {
        foreach ($_SESSION as $name => $value)
        {
            $parts = explode(':new:', $name);
            if (is_array($parts) && count($parts) == 2)
            {
                $new_name = $this->flashdata_key.':old:'.$parts[1];
                $this->set_userdata($new_name, $value);
                $this->unset_userdata($name);
            }
        }
    }
    /**
    * PRIVATE: Internal method - removes "flash" session marked as 'old'
    */
    function _flashdata_sweep()
    {
        foreach ($_SESSION as $name => $value)
        {
            $parts = explode(':old:', $name);
            if (is_array($parts) && count($parts) == 2 && $parts[0] == $this->flashdata_key)
            {
                $this->unset_userdata($name);
            }
        }
    }
}

#3


2  

Maybe you not automatic load library session.

也许您没有自动加载库会话。

Have you try this in controller dashboard:

你在控制器仪表盘上试过这个吗?

$this->load->library('session');
print_r($this->session->all_userdata());

#4


2  

PHP 7 Upgrade - * Known SESSION / COOKIE Bug

PHP 7升级- *已知会话/ COOKIE错误

This answer addresses the known session/cookie bug - when you upgrade to PHP7 from PHP 5.

当您从PHP 5升级到PHP7时,这个答案解决了已知的会话/cookie错误。

If your CodeIgniter version is @ 3.1.0 or below - and you are upgrading to PHP 7.1 - You will need to update CodeIgniter.

如果您的CodeIgniter版本是@ 3.1.0或以下——并且您正在升级到PHP 7.1——您将需要更新CodeIgniter。

There is a bug with $this->session->set_userdata(); - that can be pretty annoying. It will overwrite your session as soon as you redirect or visit another page within your site structure.

有一个错误是$this->会话->set_userdata();-那可真烦人。当您重定向或访问站点结构中的另一个页面时,它将覆盖您的会话。


Some other discussions about the bug: https://github.com/bcit-ci/CodeIgniter/issues/4830

关于这个bug的一些其他讨论:https://github.com/bcit-ci/codeigniter/issues es/4830

*Save some time and see post by See post "dyanakiev commented on Oct 23, 2016" -

*节省时间,见帖子“dyanakiev在2016年10月23日评论”-。

"Just to confirm: Everything works perfect with 3.1.1, no more problems with sessions. ???? Good job! ????"

只是想确认一下:3.1.1版的所有功能都很完美,没有任何会话问题。????job!好????"


See upgrade instructions here: https://www.codeigniter.com/use…/installation/upgrading.html

请参阅这里的升级说明:https://www.codeigniter.com/use.3/installation/upgrading.html

Latest CodeIgniter Download here: https://codeigniter.com/download

最新的CodeIgniter下载:https://codeigniter.com/download

*I can also confirm this as well:

*我也可以确认:

Updating codeigniter to 3.1.6 fixed the session problem immediately - that had occurred after I updated server to PHP 7.1.*

将codeigniter更新为3.1.6立即修复了会话问题——这是在我将服务器更新为PHP 7.1之后发生的

#5


1  

Make sure your app has permissions to create the session files to /tmp (where file sessions are stored) if your not using a database for the sessions.

如果您没有为会话使用数据库,请确保您的应用程序有权限将会话文件创建到/tmp(存储文件会话的地方)。

More than likely you need to look at php.ini on the production server and verify the session save handler is defined http://devzone.zend.com/413/trick-out-your-session-handler/ explains this rather well.

您很可能需要查看php。在生产服务器上验证会话保存处理程序的ini定义为http://devzone.zend.com/413/trick-out- session-handler/。

#6


1  

I realize you're trying to debug your issue; but have you tried removing the echo/print before redirecting?

我知道你在调试你的问题;但是你试过在重定向之前移除回波/打印吗?

I'm no 'session' expert, but I've had similar issues where printing out debug information before redirecting would cause session data the die on the next page.

我不是“会话”专家,但我也遇到过类似的问题,在重定向之前打印调试信息会导致会话数据在下一页上消失。

Also, @edelweiss is on the money :)

此外,@edelweiss说道:

#7


0  

I saw a similar post and was directed to here to try using his sessions.php

我看到了一个类似的帖子,并被引导到这里尝试使用他的sessions.php。

And it works for me!

这对我很有效!

http://www.philsbury.co.uk/blog/code-igniter-sessions

http://www.philsbury.co.uk/blog/code-igniter-sessions

#8


0  

In My case, after some tests (with https and http in localhost) the error comes for that issue and not having properly set the $config['cookie_secure'], so you can try changing in config.php:

在我的例子中,经过一些测试(在localhost中使用https和http),出现了这个问题,并且没有正确设置$config['cookie_secure'],因此您可以尝试在config.php中进行更改:

$config['cookie_secure']    = FALSE; // if is not under https, or true if you use https

Cheers!

干杯!

#9


0  

Make sure you session_start() before using $_SESSION. I had this problem, I foolishly assumed that

在使用$_SESSION之前,请确保您的session_start()。我有这个问题,我愚蠢地认为。

$this->load->library('session');

$ this - > - >加载库(“会话”);

will do that for me, but not.

会为我做,但不会。

#10


0  

I was facing the same issue and after a long research I found the solution.

我面临着同样的问题,经过长时间的研究,我找到了解决方案。

My session is stored in db not in files but even database is also restricted to store the size, I think..

我的会话存储在db中而不是文件中,甚至数据库也被限制存储大小。

Its not any core issue of codeigniter or something that is session destroyed automatically or something else..

这不是任何代码点火器的核心问题,也不是自动销毁会话的问题。

It is actually the load of data amount in session, if we save the more & more data inside session with Codeigniter("I am not sure about native session but for codeigniter I can confirm this"), it will destroy the session automatically.

它实际上是会话中数据量的加载,如果我们使用Codeigniter将越来越多的数据保存在会话中(“我不确定是本机会话,但对于Codeigniter我可以确认这一点”),它将自动销毁会话。

So what you have to do is, to go to that code that you are writing to get the data from db or somewhere else and then saving into session in userdata, try to reduce the load of data saving inside the session and exclude that data which is not needed on page from session every time.

所以你要做的是,去,你写的代码从数据库或其他地方获得数据,然后在用户数据保存到会话,尽量减少负载的数据保存在会话和排除数据页不需要每次都从会话。

Let me know if still there is an issue..

如果还有什么问题,请告诉我。

#11


0  

This might be late. But felt i should drop it. Had same issue too. I m using codeigniter and wiredesignz hmvc and i noticed the error was from the htaccess. Try adding a back slash after the rewrite base url

这可能会迟到。但我觉得我应该放弃它。也有同样的问题。我正在使用codeigniter和wiredesignz hmvc,我注意到错误来自htaccess。尝试在重写基url之后添加反斜杠

#12


0  

In case someone get stuck using Homestead (as I was), this is a CodeIgniter bug and is not present on newer versions (I read), you can upgrade your CI version or downgrade your PHP version "per project" with Homestead 6+, as in the example:

如果有人使用Homestead(就像我一样),这是一个CodeIgniter bug,并没有出现在新版本(我阅读)中,您可以升级您的CI版本,或者将您的PHP版本“per project”降级为Homestead 6+,例如:

//Homestead.yaml
    - map: myproject.test
      to: /home/vagrant/Code/myproject
      php: "5.6"

and then simple run homestead provision.

然后是简单的宅基地供应。

#13


0  

I solved this issue by upgrading my codeigniter. Go to Codeigniter download

我通过升级codeigniter解决了这个问题。去Codeigniter下载

Download it and replace your project system folder with newly downloaded one.

下载并替换您的项目系统文件夹和新下载的一个。

#14


0  

if you are working in CI 3.x and just upgraded your server php version to php 7.x

如果你在CI 3工作。将您的服务器php版本升级到php 7.x。

Go to system/libraries/Session/session.php at Line no 281 and replace ini_set('session.name', $params['cookie_name']); by ini_set('session.id', $params['cookie_name']);

去系统/图书馆/会议/会议。在第281行替换ini_set('session.name', $params['cookie_name']]);报错(会话。id ",$ params[' cookie_name ']);