当我尝试在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');
然而,生成的密文的长度是改变加密算法的一个非常糟糕的原因.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。