Управление сессиями Wordpress - PullRequest
       7

Управление сессиями Wordpress

21 голосов
/ 18 сентября 2009

Я создаю сайт, используя Wordpress, и я бы хотел воспользоваться его сессиями. Но я не нахожу никаких плагинов или даже документации. Любые предложения или ссылки, прежде чем я начну взломать его?

Примечание. Я спрашиваю о том, использует ли WP стандартные сеансы PHP и как они используются, а не о том, как добавлять сеансы PHP, например. используя session_start (). Очевидно, что любое состояние, которое поддерживает WP, достигается другими способами. Поэтому, если я хочу использовать сеансы PHP, мне нужно полностью добавить и поддерживать его, используя методы, подобные тем, которые есть в потоке.

Спасибо всем!

Ответы [ 9 ]

17 голосов
/ 22 января 2011

Очень плохая идея изменить WP Core файлы для возможности использования сеансов Лучший способ, который я нашел, - это вызвать session_start() из init ловушки действий.

function kana_init_session() {
  session_start();
}

add_action('init', 'kana_init_session', 1);

Вы можете поместить его в functions.php файл вашей темы.

Подробную статью можно найти здесь: http://www.kanasolution.com/2011/01/session-variable-in-wordpress/

15 голосов
/ 25 марта 2010

WordPress, кажется, не вызывает session_start(), потому что он хочет быть без сохранения состояния и если register_globals определен, он автоматически уничтожает ваш $_SESSION

5 голосов
/ 17 марта 2011

Рассмотрите возможность использования WordPress Transient API

Значения, сохраненные с помощью API Transient, видны всем пользователям, а не только текущему пользователю. В зависимости от уникального идентификатора, используемого для извлечения переходного процесса, вы можете назначить каждому пользователю уникальный идентификатор, по существу вызывающий переходный процесс, который очень похож сессия.

Дополнительные соображения:

  • В зависимости от настроек пользователя с кешем объектов и т. Д., Переходные процессы могут не всегда хранится в БД (например, memcached), используя переходные процессы для сессии могут означать, что данные могут стать громоздкими и заполнить память быстро (при использовании memcached).

  • Также, похоже, что WP не выполняет автоматическую сборку мусора для переходные процессы: https://wordpress.stackexchange.com/questions/6602/are-transients-garbage-collected

5 голосов
/ 10 октября 2009

Для того, что мне нужно сделать, лучший ответ включает в себя:

  1. Чтобы файл cookie для wordpress сохранялся во всех поддоменах, установите плагин Root Cookie .
  2. sub1.domain.com имеет wordpress; sub2.domain.com - другой сайт. С другого сайта ( sub2 ) я читаю файлы cookie, чтобы определить, кто является пользователем и вошел ли пользователь в систему.

Мои файлы cookie:

[wordpress_909bb230b32f5f0473202684d863b2e0] => mshaffer|1255298821|d0249fced9c323835c5bf7e84ad3ffea
[wordpress_logged_in_909bb230b32f5f0473202684d863b2e0] => mshaffer|1255298821|56e9c19541ecb596a1fa0995da935700

Используя PHP, я могу перебирать куки, анализировать пары key=>value. Эти куки позволяют мне знать, что [mshaffer] имеет куки, сохраненные в WordPress, а также аутентифицируется как logged_in. Срок действия файла cookie составляет 1255298821.

В sub2 я могу запросить базу данных wordpress и получить информацию о пользователе:

SELECT * FROM `wp_users` WHERE user_login = 'mshaffer' ... захват user_id , user_email из этого запроса

SELECT * FROM `wp_usermeta` WHERE user_id = '$user_id' ... получить много других данных из wp

С помощью этой информации я могу добавить к моей sub2 переменную сеанса / cookie и делать с данными то, что я хочу. Я могу определить, если я вошел в систему, и мое имя пользователя ... что позволяет мне собирать много разных данных. Теперь я могу использовать проверку подлинности WordPress в моем sub2.domain.com и перенаправлять соответственно.

1046 * монте *

{х:

2 голосов
/ 04 октября 2009

WordPress, похоже, не использует сессий.

Лучший способ сделать это - использовать предоставляемые им хуки действий.

1 голос
/ 10 августа 2012

Подключение функции с session_start() к wp_loaded, кажется, работает в этом случае.

1 голос
/ 09 августа 2012

Вы проверили решение здесь, это может работать здесь, и его по-легкому

http://thedigilife.com/wordpress-how-to-set-session-custom-variable-while-login/

1 голос
/ 13 апреля 2011

Поместите этот код в wp-config.php в первой строке:

if (!session_id()) {
    session_start();
}

Поместите этот код в заголовок темы в первой строке:

session_start();

Тогда он будет поддерживать все переменные сеанса.

0 голосов
/ 02 ноября 2011

Если вы хотите использовать собственные значения сеанса, Wordpress поддерживает его .

Вам необходимо добавить следующие строки вверху wp-config.php

if (!session_id()) {
    session_start();
}

Затем добавьте следующую строку вверху header.php

session_start();
...