У меня есть простая функция проверки сеанса для моего сайта, которая перенаправляет на страницу входа, если определенная переменная сеанса не установлена.
public function checkSessionIsActive($session)
{
if (!isset($_SESSION["userID"])) {
header('Location: https://www.mywebsite.com/index.php');
exit();
}
}
Это работает, как и ожидалось, на моем сайте.
Недавно я добавил раздел Wordpress на свой основной сайт. Раздел Wordpress находится в собственном каталоге /knowledgebase.
Я хочу добавить функцию проверки сеанса на сторону сайта Wordpress и сделал это, добавив ее на страницу index.php
в пределах /knowledgebase
(первая страница, загружаемая при переходе на www.mysite.com/knowledgebase. Я убедился, что есть session_start()
тоже.
<?php
session_start();
require "../classes/pageHandler.class.php";
$page = new PageHandler;
$page->checkSessionIsActive($_SESSION);
/**
* Front to the WordPress application. This file doesn't do anything, but loads
* wp-blog-header.php which does and tells WordPress to load the theme.
*
* @package WordPress
*/
/**
* Tells WordPress to load the WordPress theme and output it.
*
* @var bool
*/
define('WP_USE_THEMES', true);
/** Loads the WordPress Environment and Template */
require( dirname( __FILE__ ) . '/wp-blog-header.php' );
По какой-то причине это не работает должным образом. При переходе на www.mysite.com/knowledgebase меня перенаправляют, как будто if (!isset($session["userID"]))
возвращает false.
Захожу снова, пробую ссылку еще раз - работает. Каждый раз во всех браузерах.
Чтобы добавить к странному характеру этой проблемы, каждый раз, когда я пробовал var_dump($_SESSION)
в файле /knowledgebase/index.php, он показывает, что переменная сеанса «userID» существует, и я не перенаправляюсь. Удалите var_dump, очистите историю посещенных страниц и повторите попытку — сначала это не удается, а затем работает во второй раз.
Есть идеи?