5

我已遵循本指南: http: //philpalmieri.com/2009/06/codeigniter-and-wordpress-play-well-together/

这基本上是说,要安装 wordpress,让它工作,然后用 Code Igniters 替换 index.php 文件,然后在我们启动 CodeIgniter 之前的文件底部,需要 wordpress 的 wp-load 文件。

工作正常。

但是现在,我的 $_SESSION 不起作用。我已将代码点火器设置为使用数据库会话,并记录会话值,但它仍然不起作用。我无法登录我的 CodeIgniter 系统管理面板,我不能做很多需要会话的事情,因为会话不起作用。哈哈。

如何解决这个问题?

4

2 回答 2

4

我做了以下工作来让它工作(我在 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,并且成功保留了会话。

我希望这有帮助!

于 2013-01-30T04:46:37.537 回答
1

这里有一个关于 WordPress 如何取消设置会话变量的解释,以及一个可能的解决方案。不幸的是,它似乎需要修改核心文件 - 似乎没有任何挂钩wp_unregister_GLOBALS会有所帮助。

于 2012-04-14T17:52:27.230 回答