我做了以下工作来让它工作(我在 Wordpress 目录中的单独目录中有一个 Code Igniter 应用程序)——我显然不喜欢它,因为我必须在 Wordpress 中修改一个核心文件。
首先,我将我的 Code Igniter cookie 名称添加到 wp-includes/load.php 中的 $no_unset 数组中,在我的例子中是 ci_session:
$no_unset = array( 'GLOBALS', '_GET', '_POST', '_COOKIE', '_REQUEST', '_SERVER', '_ENV', '_FILES', 'table_prefix','ci_session' );
其次,我发现 Wordpress 的 add_magic_quotes 函数正在破坏 $_COOKIE 全局变量。这导致 CodeIgniter 在每次页面加载或重定向时重新创建 cookie,从而破坏了任何连续性。所以,我在 wp-includes.load.php 中注释了这一行(大约第 545 行)
//$_COOKIE = add_magic_quotes( $_COOKIE );
接下来,为了让这个函数与所有其他与 Wordpress 相关的 cookie 保持一致,我创建了一个 array_walk 函数来循环 $_COOKIE 全局并将 add_magic_quotes 应用于除 wp-includes/load.php 函数中的我之外的所有 cookie
/**
* Applies Magic Quotes to the $_COOKIE global but ignores Codeigniter's Cookie
* @param string $value Value passed by array_walk function
* @param string $key Key passed by array_walk function
*/
function ci_ignore_magic_quotes($value,$key)
{
if($key != "ci_session")
{
stripslashes_deep($value);
}
}
//Put this line in place of the commented out line above...
array_walk($_COOKIE, 'ci_ignore_magic_quotes');
完成此操作后,我的 ci_sessions 表中不再存储多个 cookie,并且成功保留了会话。
我希望这有帮助!