Управление сеансом Wordpress
Я размещаю сайт, используя Wordpress, и я хотел бы контрейлеровать на его сеансах. Но я не нахожу никаких плагинов или даже документации. Любые предложения или ссылки, прежде чем я начну его взламывать?
Примечание. Я спрашиваю, как и как WP использует стандартные сеансы PHP, а не как добавлять PHP-сессии, например. используя session_start(). По-видимому, любое состояние WP поддерживает, другими способами. Поэтому, если я хочу использовать сеансы PHP, мне нужно полностью добавить и поддерживать его, используя методы, подобные тем, которые есть в потоке.
Спасибо всем!
Ответы
Ответ 1
Вы видели это?
http://www.thinkingoutloud.co.za/content/20091012/php_wordpress_and_session
WordPress не вызывает вызов session_start()
, потому что он хочет быть апатридом
и если register_globals
определен, он автоматически уничтожает ваш $_SESSION
Ответ 2
Это очень плохая идея для изменения файлов WP Core для возможности использования сеансов. Лучший способ, который я нашел, - вызвать session_start()
из init
action hook.
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/
Ответ 3
Для чего мне нужно, лучший ответ включает в себя:
- Чтобы файл cookie для wordpress сохранялся в субдоменах, установите Root Cookie plugin.
- 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
. Эти файлы cookie сообщают мне, что [mshaffer]
имеет cookie, хранящийся в 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 и перенаправлять соответственно.
монте
{х:
Ответ 4
Рассмотрите возможность использования WordPress Transient API
Значения, хранящиеся с использованием API Transient, видны для всех пользователей, а не только для текущего пользователя, в зависимости от уникального идентификатора, используемого для получения переходного процесса, вы можете назначить каждому пользователю уникальный идентификатор, по существу, заставляющий переходный процесс вести себя очень похоже на сессии.
Дополнительные соображения:
-
В зависимости от настройки пользователей с кешем объекта и т.д. переходные процессы могут
не всегда сохраняются в БД (например, memcached), используя переходные процессы для
сессии могут означать, что данные могут получить громоздкие и заполнять память
быстро (при использовании memcached).
-
Кроме того, похоже, что WP не делает сборку мусора для
переходные процессы:
https://wordpress.stackexchange.com/questions/6602/are-transients-garbage-collected
Ответ 5
Wordpress, похоже, не использует никаких сеансов.
Лучший способ сделать это - использовать обработчики действий, которые он предоставляет.
Ответ 6
Поместите этот код в wp-config.php в первую строку:
if (!session_id()) {
session_start();
}
Поместите этот код в тему header.php в первой строке:
session_start();
Затем он будет поддерживать все переменные сеанса.
Ответ 7
Если вы хотите использовать свои собственные значения сеанса, Wordpress поддерживает его.
Вам нужно добавить следующие строки вверху wp-config.php
if (!session_id()) {
session_start();
}
Затем добавьте следующую строку вверху header.php
session_start();
Ответ 8
Вы проверили решение здесь, это может работать здесь и его на простом пути.
http://thedigilife.com/wordpress-how-to-set-session-custom-variable-while-login/
Ответ 9
В этом случае работает работа с функцией session_start()
on wp_loaded
.