【问题标题】:why in Codeigniter my session lost in other pages?为什么在 Codeigniter 中我的会话在其他页面中丢失了?
【发布时间】:2017-11-11 15:48:03
【问题描述】:

这是我第一次使用 Codeigniter 3.x。登录身份验证后,我在 Login_model.php 中设置会话数据:

  $data_session = array(
            'PersonId' => $PersonId,
            'PersonEmail' => trim($PersonEmail),
            'PersonName' => trim($PersonName),
            'PersonFamily' => trim($PersonFamily),
            'Login' => true);
        $this->session->set_userdata($data_session);

在重定向之前,我可以通过以下方式访问我的会话数据:

print_r($this->session->userdata()); 



 Array([__ci_last_regenerate] => 1510383844   [PersonId] => 129[PersonEmail]=> h@q.com  [PersonName] => PersonName   [PersonFamily] => PersonFamily   [Login] => 1)

但重定向后我的会话数据是这样的:

Array( [__ci_last_regenerate] => 1510384212)

我在 config.php 中的设置也是:

$config['sess_driver'] = 'files';
$config['sess_cookie_name'] = 'east';
$config['sess_expiration'] = 7200;
//$config['sess_save_path'] = sys_get_temp_dir();
$config['sess_save_path'] = 'ci_sessions';
$config['sess_match_ip'] = TRUE;
$config['sess_time_to_update'] = 300;
$config['sess_regenerate_destroy'] = FALSE;
//------------------
$config['cookie_prefix']    = '';
$config['cookie_domain']    = 'domain/admin/';
$config['cookie_path']        = '/';
$config['cookie_secure']    = FALSE;
$config['cookie_httponly']     = FALSE; 

我在这方面回顾了很多事情。但我仍然没有得到好的结果。

【问题讨论】:

    标签: codeigniter session redirect


    【解决方案1】:

    使用时

    $config['sess_driver'] = 'files';
    

    那么$config['sess_save_path']必须设置为存放会话文件的文件夹的绝对路径。

    采用这种文件夹结构

    webroot/
       application/
       sessions/
       system/
       ...etc/
    

    然后

    `$config['sess_save_path'] = FCPATH."sessions/";`
    

    将完美运行。

    文件夹写入权限必须适当设置。

    编辑

    您应该尝试设置$config['cookie_domain'] = '';(一个空字符串),如果这不起作用尝试$config['cookie_domain'] = '.your-domain.com';

    以下控制器将允许您测试会话是否正常工作。在您的控制器文件夹中创建一个名为 Test_sessions.php 的文件。 使用此代码。

    <?php
    /**
     * This class is useful for testing the configuration of the CodeIgniter "session" library.
     * It works only for CodeIgniter versions >= 3.0.0
     * 
     * If "session" is properly configured then each time you ask a browser for this page
     * the display will alternate between "No session data" and the value of $this->sess_message.
     */
    defined('BASEPATH') OR exit('No direct script access allowed');
    
    class Test_sessions extends CI_Controller
    {
        /**
         * @var string So you can define your own message to be displayed.
         */
        public $sess_message;
    
        function __construct()
        {
            parent::__construct();
            // The next line can be commented out if 'session' is autoloaded - or not, doesn't matter.
            $this->load->library('session');  
            $this->sess_message = "We got session data!";
        }
    
        public function index()
        {
            echo date("F j, Y, g:i:s a")."<br>"; //so you can tell the page actually does refresh
            if($this->session->testing)
            {
                echo $this->session->testing;
                unset($_SESSION['testing']);
            }
            else
            {
                echo "No session data";
                $_SESSION['testing'] = $this->sess_message;
            }
        }
    
    }
    

    浏览至http://yoursite.com/test_sessions。如果会话配置正确,则每次刷新页面时,它都会在两条消息之间交替显示。

    【讨论】:

    • 我改了。但问题仍然存在。登录后,在会话文件夹中创建会话文件。其中一个有完整的会话数据,另一个只有 __ci_last_regenerate 数据
    • 我创建了你的控制器,登录后我看到这条消息:我们得到了会话数据!有会话,但会话中没有我的数据,只有 ci_last_regenerate。
    • 那么您的会话和/或 cookie 配置很可能是错误的。您是否按照我修改后的答案中所述更改了$config['cookie_domain']
    • 是的 - 我也改了
    【解决方案2】:

    我通过将配置更改为:

    $config['sess_driver'] = 'files';$config['sess_cookie_name'] = 'ci_session';$config['sess_expiration'] = 86400;$config['sess_save_path'] = FCPATH.'sessions/';$config['sess_match_ip'] = FALSE;$config['sess_time_to_update'] = 3600;$config['sess_regenerate_destroy'] = TRUE;$config['cookie_prefix']    = '';$config['cookie_domain']   = '';$config['cookie_path']     = '/';$config['cookie_secure']  = FALSE;$config['cookie_httponly']  = FALSE;
    

    【讨论】:

      猜你喜欢
      • 2014-10-31
      • 1970-01-01
      • 1970-01-01
      • 2014-08-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-23
      • 1970-01-01
      相关资源
      最近更新 更多