当我尝试在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应用程序日志文件夹具有正确的权限,则会记录以下错误:
严重性:通知 - &gt; unserialize():错误0偏移量为286字节/Applications/MAMP/htdocs/final/system/libraries/Session.php 741
1。这是CodeIgniter的错误还是我做错了什么?
2。我该怎么做才能发挥作用?
P.S. had to change cipher because default encryption result was too long for a message I needed to encrypt, but I wanted to use default method for anything else CI uses
答案 0 :(得分:12)
A1:两者。
这本身并不是一个bug,但绝对是糟糕的设计。 CI2会话库确实依赖于CI_Encrypt
的{{1}}实例。因此,当会话库已经在使用它并且您在该过程的中间更改密码时,确实是您要破解它。
A2:加载另一个加密库实例供您自己使用。
像这样:
$this->encrypt
但是,生成的密文长度是改变加密算法的一个非常糟糕的原因。