【问题标题】:CodeIgniter 3 and sessionsCodeIgniter 3 和会话
【发布时间】:2015-04-07 18:38:21
【问题描述】:

我最近更新到 CodeIgniter 3,遵循本指南: CI3: upgrade 3.0 from 2.2.1.

我在 application/config/config.php 文件中设置了这个配置:

$config['sess_driver'] = 'files';
$config['sess_cookie_name'] = 'ci_session_my_site';
$config['sess_expiration'] = 604800; // 1 week
$config['sess_save_path'] = NULL;
$config['sess_match_ip'] = FALSE;
$config['sess_time_to_update'] = 300;

这里有什么问题吗?几个小时后我的会话被破坏了......

【问题讨论】:

  • 您正在为会话驱动程序使用文件,但您将路径设置为空?还有,你说几个小时,是不是有可能是 5 小时(5 小时换算成 300 分钟)?
  • 我不确定时间(有没有办法确切知道?)。我应该为路径设置一个值吗?我以为它只是用于存储在数据库中的会话。
  • 查看您的链接。它说如果你想使用'files'你必须设置sess_save_path,所以它不能为null
  • 他们没有给出任何例子还是我错了?它是这样写的:“设置一个 $config['sess_save_path'] 值。对于 'database' 驱动程序,回退到 $config['sess_table_name'] 已经到位,但否则需要您阅读特定驱动程序的手册选择。”我只是不明白我应该在这个变量中写什么。你能给我一些例子吗?
  • @Maxime 谢谢!你是对的,cookie不再有效,因为我使用数据库,codeigniter切换到数据库驱动程序,因为cookie不存在。这是我在这里犯的一个可怕的复制/粘贴错误。另外,我的意思是,codeigniter 的会话存储用户上次活动的时间戳。框架使用此信息计算每个 $config['sess_time_to_update'] 新的过期时间。

标签: php codeigniter session


【解决方案1】:

在您的保存路径中,您需要设置一个位置文件夹。首选使用'files' 作为会话驱动程序。如下所示,我已经设置了一个缓存来将会话存储在设置文件夹的 BASE PATH 中。确保您有自动加载的会话和$config['encryption_key'] = '' 添加密钥。

您可以设置数据库会话,但这也同样有效。确保文件夹权限 0700

http://www.codeigniter.com/userguide3/search.html?q=session&check_keywords=yes&area=default

$config['sess_driver'] = 'files';
$config['sess_cookie_name'] = 'ci_session';
$config['sess_expiration'] = 1440;
$config['sess_save_path'] = BASEPATH . 'yourfoldername/cache/';
$config['sess_match_ip'] = TRUE;
$config['sess_time_to_update'] = 300;

完成后,您应该能够执行类似的操作。

$this->load->library('session');
$data_session_set = array('logged' => 1, 'username' => $this->input->post('username'), 'user_id' => $this->user_auth->get_id()); 
$this->session->set_userdata($data_session_set);

【讨论】:

  • 谢谢mustang83,但我应该在哪里创建文件夹?进入应用程序?我的基本路径是:/home/maxime/Documents/informatique/perso/my_project/system/。将会话存储到系统中有点奇怪?
  • 我觉得这样更安全。这就是我在系统中存储重要资料的唯一原因。
  • 好的,谢谢,我尝试添加文件夹,现在可以看到其中的文件。如果可以的话明天我会告诉你的! :)
  • 即使取消链接所有会话文件,它仍然会在其中保留一个文件,它只是重新生成,所以没关系。
  • 如何清除会话文件夹。创建的文件很多。
【解决方案2】:

我使用这个代码它工作。

    if (version_compare(PHP_VERSION, '5.4.0', '<')) {
        if(session_id() == '') session_start();
    } else  {
       if (session_status() == PHP_SESSION_NONE) session_start();
    }

【讨论】:

    【解决方案3】:

    在 application/config/config.php 中设置这个值:

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

    【讨论】:

      【解决方案4】:

      我使用了 2 个不同的值,但它们以某种方式起作用,这取决于 Centos 的版本:

      对于我使用的 Centos 6.X:

      在 application/config/config.php 中设置这个值:

      $config['sess_save_path'] = NULL;

      对于我使用的 Centos 7.X:

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

      如果您将应用程序从一个服务器版本移动到另一个服务器版本而不编辑此值,它将不起作用。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-07-07
        • 1970-01-01
        • 2018-04-07
        • 2015-10-06
        • 2015-09-13
        • 2021-12-25
        • 1970-01-01
        • 2015-09-09
        相关资源
        最近更新 更多