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

前端之家收集整理的这篇文章主要介绍了php – CodeIgniter 2.x set_cipher和set_flashdata不能一起使用前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
当我尝试在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');

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

猜你在找的PHP相关文章