Проблемы с доступом к одним и тем же переменным SESSION из разных файлов - PullRequest
1 голос
/ 31 октября 2011

Я занимаюсь разработкой сайта с использованием Wordpress.

В моей структуре постоянных ссылок указано название записи / страницы. Таким образом, доступ к странице с именем store будет выглядеть следующим образом: www.mysite.com/store/?some=arguments

Во всех моих шаблонах WP я могу вывести все переменные SESSION, используя print_r($_SESSION);

То же самое из файла, вызванного из jQuery.ajax, выводит только некоторые из переменных SESSION.

Я использовал следующий код, чтобы проверить, одинаковы ли пути для файлов cookie для обоих файлов:

$sessCookie = ini_get('session.cookie_path'); 
echo 'session.cookie_path: '.$sessCookie; 

У меня также есть этот код в моих файлах, чтобы убедиться, что сессия запущена:

if (!session_id())
  session_start();

Почему я не могу вывести одинаковые переменные сеанса из шаблона WP и php-файла, вызываемого из jQuery.ajax?

UPDATE

jQuery.ajax вызывает jquery.php файл. В верхней части этого файла он имеет следующий код:

require_once($_SERVER['DOCUMENT_ROOT'].'/wp-blog-header.php');

Этот код запускает functions.php. В этом файле у меня есть следующий код:

function session_manager() {
  if (!session_id())
        session_start();

  // Get variables in query string
  $_SESSION['action'] = (isset($_GET['action']) ? $_GET['action'] : '');
  $user_geo_data = get_geoip_record();     
  $_SESSION['user_geo_location'] = get_object_vars($user_geo_data);
}

Когда functions.php запускается из jquery.php, кажется, что session_id() возвращает false, поэтому я создаю новый сеанс.

Есть ли способ продолжать использовать один и тот же сеанс?

ОБНОВЛЕНИЕ 2

Кажется, что WP config убивает все глобальные переменные при инициализации.

http://wordpress.org/support/topic/wp-blog-headerphp-killing-sessions

Ответы [ 2 ]

0 голосов
/ 12 февраля 2012

Причина, по которой два сеанса запускаются, заключается в том, что первый из них основан на браузере (через cookie), а второй, с Ajax, по существу на стороне сервера и не имеет доступа к cookie сеанса.

Файл cookie сеанса хранит идентификатор сеанса и используется для идентификации существующего сеанса.Сценарий Ajax на стороне сервера не имеет доступа к файлам cookie браузера, поэтому запускает новый сеанс.

Может быть хуже, если основной сценарий использует альтернативный сеанс " обработчик сохранения", чем сценарий Ajax, в результате чего два отдельных сеанса хранятся в двух разных местах.

0 голосов
/ 31 октября 2011

Wordpress может использовать свой собственный обработчик сеанса и переопределяет обработчик сеанса по умолчанию для этого. По сути, у вас есть два разных сеанса, даже если они имеют один и тот же идентификатор. Путь к cookie - это просто способ работы cookie на стороне клиента. Необходимо проверить session_save_path() и проверить, выполняет ли WP сеансы через базу данных вместо обработчика файлов по умолчанию.

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