通过InsertPHP插件调用主题操作

时间:2019-01-12 20:27:37

标签: php wordpress session

我正在尝试建立一些自定义api挂钩,以在我们的wordpress网站上实现会话系统,但是我遇到了一些问题。

主要似乎是我的do_action调用不起作用。这是我设置它们的方式。

在木星主题function.php的顶部:

//Custom action for PHP session handling
add_action('init', 'start_session');
add_action('glogout','end_session');


//Start custom functions for PHP Sessions
function start_session() {
        if(!session_id()) {
                session_start();
        }
}

function end_session() {
        session_destroy();
}

然后这是我在InsertPHP(又称PHP代码段)插件中使用的代码段。这只是一个测试代码片段,在我删除会话然后创建一个新会话时没有逻辑意义。我只想确认该动作调用是否有效:

do_action('glotout');
session_start();

if (session_id()){
        echo $_SESSION['Username']."!  Please choose a planet below to get started!";
      } else{
        echo "space cadet!  It seems as though you have not logged in.  Please return to the <a href=\"https://www.learninglabtechnologies.com/grant-login-page\">login page</a> and try again!";
      }

现在,问题是在我从中调用该代码段的页面上,它没有删除会话,因此我收到“无法启动会话,一个已经存在”错误:

  

注意:会话已经开始-忽略session_start()   在   /var/www/html/wp-content/plugins/insert-php/includes/shortcodes.php(66)   :第2行上的eval()代码

根据此通知,我还遇到尝试访问登录时设置的会话变量的问题:

  

注意:未定义的索引:用户名位于   /var/www/html/wp-content/plugins/insert-php/includes/shortcodes.php(66)   :第5行上的eval()代码

当用户在数据库查询功能期间登录时,我正在设置Username会话变量,这可能是问题的一部分。该代码如下所示:

if ($uLoginStmt = $sql->Prepare("Select ID from Accounts where Username = ? and Password = ?;")){
        if ($uLoginStmt->bind_param('ss',$uname,MD5($pword))){
            if ($uLoginStmt->execute()){
                $uLoginStmt->bind_result($uid);
                $uLoginStmt->fetch();

                if ($uid != 0){
                    $bCompleted = true;
                    $error = "Success";

                    $_SESSION['Username'] = $uname;
                    $_SESSION['UserID'] = $uid;
                }
                ...

我以前只使用过一次php会话,而没有在WordPress中使用过,所以我不确定是否所有设置都正确/完整。


更新:

解决了do_action问题。这只是一个错字。另一个问题仍然存在。我仍然无法按所述访问会话变量。我可能设置了错误的内容。


更新2: 来自InsertPHP代码段中的$ _SESSION全局变量的转储导致了此输出(我删除了session_destroy调用):

  

array(0){}

1 个答案:

答案 0 :(得分:0)

好的,我终于明白了。我需要从我的登录php函数中调用session_start(),以便正确拉出会话并设置值。我可能也对EC2服务器上的php配置有问题,以及未设置会话保存路径,并且禁用了其他一些选项。