Я пытаюсь настроить некоторые пользовательские 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) {}