Вызовите действие темы из плагина InsertPHP - PullRequest
0 голосов
/ 12 января 2019

Я пытаюсь настроить некоторые пользовательские API-хуки для реализации системы сессий на нашем сайте WordPress, но у меня возникают некоторые проблемы.

Основным кажется то, что мои вызовы do_action не работают. Вот как я их настроил.

В верхней части нашей темы Jupiter 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 Snippets). Это всего лишь тестовый фрагмент, он не имеет логического смысла, так как я удаляю сеанс, а затем создаю новый; Я просто хочу подтвердить, что вызов действия работает:

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) : eval () 'код в строке 2

Я также вижу проблему с попыткой доступа к переменной сеанса, которую я установил при входе в систему согласно этому уведомлению:

Примечание: неопределенный индекс: имя пользователя в /var/www/html/wp-content/plugins/insert-php/includes/shortcodes.php(66) : eval () код в строке 5

Я устанавливаю переменную сеанса Имя пользователя, когда пользователь входит в систему во время функции запроса к базе данных, которая может быть частью проблемы. Вот как выглядит этот код:

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: Дамп var глобального $ _SESSION из фрагмента InsertPHP привел к получению этого результата (я удалил вызов session_destroy):

array (0) {}

1 Ответ

0 голосов
/ 13 января 2019

Хорошо, я наконец понял. Мне нужно было вызвать session_start () из моих функций php входа в систему, чтобы правильно вытащить сеанс и установить значения. Возможно, у меня также была проблема с конфигурацией php на нашем сервере EC2, так как не был задан путь сохранения сеанса, а некоторые другие параметры были отключены.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...