gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 01:26:06 27 4
gpt4 key购买 nike

当我尝试在 CodeIgniter 中同时使用 set_cipherset_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';

Controller (尽可能简化):

<?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');
}

}

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

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

<强>1。这是 CodeIgniter 错误还是我做错了什么?

<强>2。我应该怎么做才能使其发挥作用?

P.S.必须更改密码,因为默认加密结果对于我需要加密的消息来说太长,但我想对 CI 使用的其他任何内容使用默认方法

最佳答案

A1:两者。

这本身不是一个错误,但绝对是糟糕的设计。 CI2 session 库确实依赖于 $this->encrypt 相同的 CI_Encrypt 实例。因此,当 session 库已经在使用它并且您在该过程的中间更改了密码时,确实是您破坏了它。

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

像这样:

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

但是,生成的密文的长度是更改加密算法的一个非常糟糕的理由。

关于php - CodeIgniter 2.x set_cipher 和 set_flashdata 不能一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30143588/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com