加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php – CodeIgniter 2.x set_cipher和set_flashdata不能一起使用

发布时间:2020-12-13 13:57:05 所属栏目:PHP教程 来源:网络整理
导读:当我尝试在CodeIgniter中一起使用set_cipher和set_flashdata时,flashdata不会被设置,并且记录了一个php错误. 在一个新的CI上重现这一点: 更改以下config.php行(从默认CI配置更改): $config['sess_encrypt_cookie'] = TRUE;$config['log_threshold'] = 1; /
当我尝试在CodeIgniter中一起使用set_cipher和set_flashdata时,flashdata不会被设置,并且记录了一个php错误.

在一个新的CI上重现这一点:

更改以下config.php行(从默认CI配置更改):

$config['sess_encrypt_cookie'] = TRUE;
$config['log_threshold'] = 1; // To log the error 
// Encryption key should be set,just set anything,for example:
$config['encryption_key'] = 'HjyePR4FPF70vHKaHTl8jZ0hSMgOu5bW';

控制器(尽可能简化):

<?php

class Welcome extends CI_Controller {

 function __construct(){parent::__construct();}

 function index()
 {
 $this->load->library('session');
 $this->load->library('encrypt');

 $this->encrypt->set_cipher(MCRYPT_BLOWFISH);
 $this->encrypt->encode('message');

 $this->session->set_flashdata('item','value');
 }

}

然后在浏览器和刷新页面中简单地打开控制器,您将看到flashdata未设置,如果CI应用程序日志文件夹具有正确的权限,则会记录以下错误:

Severity: Notice –> unserialize(): Error at offset 0 of 286 bytes /Applications/MAMP/htdocs/final/system/libraries/Session.php 741

这是一个CodeIgniter bug还是我做错了?

我应该怎么做这个工作?

附:不得不改变密码,因为我需要加密的消息的默认加密结果太长,但是我想使用默认方法来进行任何其他CI使用

A1:两者.

这本身不是一个bug,但绝对糟糕的设计. CI2会话库确实依赖于$this->加密的相同CI_Encrypt实例.所以当会话库已经在使用它的时候,你在这个过程的中间改变了密码,那确实是你打破它的.

A2:加载加密库的另一个实例以供您自己使用.

喜欢这个:

// You can use $this->encrypter afterwards
$this->load->library('encrypt',NULL,'encrypter');

然而,生成的密文的长度是改变加密算法的一个非常糟糕的原因.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读