我正在升级某些较旧的Codeigniter 2.x网站以使用php 7.3和最新版本的Codeigniter(3.1.10),并且遇到了CKFinder身份验证错误,不再接受PHP本机会话过去一直有效。
以前有效:
$_SESSION['authorized'] = TRUE;
然后在CKFinder配置中
return isset($_SESSION['authorized']) && $_SESSION['authorized'];
但是,这可以再一次识别会话。我已经进行了一些研究,并找到了其他一些解决方案,这些方案涉及通过在CI的index.php中加载来在CKFinder配置中使用CI的会话库。例如
//test_session.php (inside the root of CKFinders where config.php is stored)
ob_start();
define("REQUEST", "external");
$temp_system_path = $_SERVER["DOCUMENT_ROOT"].'/system';
$temp_application_folder = $_SERVER["DOCUMENT_ROOT"].'/application';
include($_SERVER["DOCUMENT_ROOT"].'/index.php');
ob_end_clean();
$CI =& get_instance();
if($CI->session->userdata('authorized') === TRUE) {
return true;
}
此代码在test_sesion.php文件中可以单独工作,尽管我觉得这有点过头了,因为我还必须对index.php进行更改以检查这些临时路径,并更新默认控制器忽略外部请求。问题是,当我尝试在CKFinder配置中实现它时,会引发很多PHP错误-特别是在我将HVMC与Codeigniter结合使用时。
我发现了一个非常相似的问题,但是提供的解决方案不起作用,并且英语非常糟糕
Call to a member function item() on null MX/Modules.php Line Number: 8 ckeditor and kcfinder
我想知道是否有人曾经遇到过这个问题,或者知道一种绕过它的方法,只是像过去一样使用本机php会话。
答案 0 :(得分:0)
最终我通过升级到最新版本的CKEditor和CKFinder解决了这个问题,它可能比我以前使用的以前版本对PHP 7.3的支持更好。
好像在带有CI 2.X的PHP 5.X和早期版本的CKFinder上,只需使用$ _SESSION变量就可以了,但是在带有PHP 7.X的CI 3.X的较新版本中,这种更复杂的解决方案必填。
如果像我一样通过wiredesignz使用HMVC,那么我引用的另一个问题将很有帮助,因为它可以解决尝试实现此问题时的另一个错误。