Как использовать собственное значение сессии в WordPress?

1 нояб. 2011 г., 21:25:38
Просмотры: 85.4K
Голосов: 19

Как я могу использовать свое собственное (пользовательское) значение сессии в WordPress?
Например: $_SESSION['myname']="4lvin"

Я уже добавил session_start() на все нужные страницы следующим образом.

<?php
session_start();
$_SESSION['myname'] = "4lvin";
?>

Но это не работает глобально.
Работает только на той же странице.
Оно НЕ доступно глобально с других страниц (используя ту же логику).

10
Комментарии

Не могли бы вы уточнить, в чем заключается специфика вашего вопроса, связанная с WordPress?

Chip Bennett Chip Bennett
1 нояб. 2011 г. 21:48:10

Что означает специфика, связанная с WordPress?

夏期劇場 夏期劇場
1 нояб. 2011 г. 21:49:13

"Что означает специфика, связанная с WordPress?" - это означает, каким образом ваш вопрос относится к WordPress?

Chip Bennett Chip Bennett
1 нояб. 2011 г. 21:51:24

Каким образом мой вопрос связан с WordPress?? Пожалуйста, прочитайте мой вопрос, и вы поймете, что относится к Wordpress.

夏期劇場 夏期劇場
1 нояб. 2011 г. 21:52:59

Я вижу вопрос о сессионных куках (session cookies). Я не вижу ничего специфичного для WordPress, поэтому и попросил уточнений.

Chip Bennett Chip Bennett
1 нояб. 2011 г. 21:53:41

Разве сессии (session) или куки (cookies) НЕ относятся к WordPress? Или разве WordPress не использует их?

夏期劇場 夏期劇場
1 нояб. 2011 г. 21:55:56

Нет. Сессии и куки — это общие темы интернета/веб-браузеров, к которым WordPress полностью безразличен.

Chip Bennett Chip Bennett
1 нояб. 2011 г. 21:57:33

@Chip Bennett, Значит... у WordPress нет никаких проблем, связанных с сессиями/куками??? И никто не должен задавать вопросы об этих проблемах в WordPress????? Хм...? Думаю, у вас недостаточно опыта работы с WordPress в таких вопросах.

夏期劇場 夏期劇場
1 нояб. 2011 г. 22:04:31

Я бы рекомендовал ознакомиться с FAQ WordPress StackExchange о тематике задаваемых вопросов.

Chip Bennett Chip Bennett
1 нояб. 2011 г. 22:10:38

Да, сессии и куки — это общие темы, но здесь вопрос скорее в том, как заставить сессии работать с WordPress... А поскольку сам WP не использует сессии, этот вопрос актуален именно здесь.

EAMann EAMann
1 нояб. 2011 г. 23:30:03
Показать остальные 5 комментариев
Все ответы на вопрос 4
5
15

РЕДАКТИРОВАНО: "ПРИВЕДЕННЫЙ НИЖЕ ПЛАГИН БОЛЬШЕ НЕДОСТУПЕН, ПОЭТОМУ ПОЖАЛУЙСТА, ИСПОЛЬЗУЙТЕ ВМЕСТО НЕГО ЭТОТ ПЛАГИН: WordPress Session Plugin"

Существует хороший плагин для WordPress, адаптированный из класса сессий CodeIgniter: WP Sessions Plugin.

После активации плагина вы можете начать использовать объект $session из любой части вашей темы (объект $session доступен глобально). Например, чтобы использовать объект $session в файле header.php, просто добавьте этот код:

global $session;

Если вы разработчик плагинов и хотите адаптировать этот плагин для своего проекта, вы также найдете автономную версию в пакете. Документация плагина содержит дополнительную информацию для разработчиков о том, как адаптировать его к вашему проекту.

Вот несколько полезных функций для разработчиков тем и плагинов.

Вы можете добавить данные сессии следующим образом:

// Одно значение
$session->set_userdata( 'username', 'john' );

// Передача массива
$array = array(
    'username' => 'john',
    'email'    => 'john@gmail.com'
);

$session->set_userdata( $array );

Чтобы получить данные сессии:

$session->userdata( 'username' );

Чтобы получить все данные сессии:

$session->all_userdata(); // возвращает массив

Чтобы удалить один элемент из сессии:

$session->unset_userdata( 'username' );

Чтобы удалить несколько элементов из сессии:

$array = array(
    'username' => '',
    'email'    => ''
);
$session->unset_userdata( $array );

Вы также можете использовать Flashdata — это данные сессии, которые будут доступны только для следующего запроса к серверу, а затем автоматически удаляются. Они могут быть очень полезны для информационных или статусных сообщений (например, «Товар был удален»).

// Добавление Flashdata
$session->set_flashdata( 'item', 'value' );

// Получение Flashdata
$session->flashdata( 'item' );

// Сохранение Flashdata 
// (если вам нужно сохранить flashdata для дополнительного запроса, 
// вы можете использовать эту функцию):
$session->keep_flashdata( 'item' );

Для уничтожения сессии:

$session->sess_destroy();

Плагин также поддерживает шорткоды. Вы можете выводить любые данные сессии в своих записях или на страницах:

[session key="username"]

Для доступа ко второму ключу:

[session key="user_data" sec_key="display_name"]

Надеюсь, это кому-то поможет.

15 нояб. 2012 г. 20:58:33
Комментарии

Плагин WP Sessions отсутствует!??

Kiren S Kiren S
26 дек. 2013 г. 12:02:23

Да, вам стоит использовать этот: http://wordpress.org/plugins/wp-session-manager/ (Он гораздо лучше и стабильнее).

kuzey beytar kuzey beytar
28 дек. 2013 г. 03:55:13

Ещё один плагин https://wordpress.org/plugins/wp-native-php-sessions/

nu everest nu everest
5 дек. 2016 г. 21:45:22

Почему мы не можем использовать стандартную функциональность сессий PHP в WordPress? Это решение создает зависимость от плагина.

Amrit Amrit
16 окт. 2017 г. 17:36:19

@Amritpal потому что не все серверы PHP/Apache поддерживают сессии. Если вы разрабатываете публичное ПО/плагин, как WordPress, нужно учитывать этот факт. Если это личный проект, где вы можете редактировать сервер, тогда проблем нет.

kuzey beytar kuzey beytar
16 окт. 2017 г. 17:44:43
5

WordPress не использует сессии, поэтому ваши переменные сессий не работают.

Более того, если определенные переменные установлены, WordPress может даже уничтожить $_SESSION, чтобы сохранить свою stateless-архитектуру.

Но если вам действительно нужно использовать сессии, попробуйте добавить session_start() в начало вашего файла wp-config.php. Это (в идеале) будет запускать сессии при каждом старте WordPress, и тогда вы сможете устанавливать и читать переменные $_SESSION в других частях системы.

1 нояб. 2011 г. 23:29:23
Комментарии

Я заметил, что WordPress использует куки для хранения некоторых данных авторизации. Когда я вывел массив $_COOKIE, то увидел эти данные. Я хотел бы установить эти данные вручную. Подробнее здесь: http://stackoverflow.com/questions/21595900/how-to-bypass-wordpress-login

shasi kanth shasi kanth
6 февр. 2014 г. 09:13:42

Также, рекомендуется ли изменять файл wp-config.php для запуска сессии? Если мы обновим WordPress позже, будет ли файл wp-config.php тоже обновлен?

shasi kanth shasi kanth
29 мая 2014 г. 12:56:05

Туториал, где подробнее обсуждается эта тема: http://silvermapleweb.com/using-the-php-session-in-wordpress/

nu everest nu everest
5 дек. 2016 г. 21:46:42

@shasikanth нет, файл wp-cofnig.php не изменяется при обновлениях.

T.Todua T.Todua
8 мар. 2018 г. 13:36:35

@shasikanth файл wp-config.php не обновляется, иначе вы можете потерять подключение к базе данных и другие параметры, которые были установлены вручную.

Erenor Paz Erenor Paz
14 авг. 2019 г. 17:32:32
0

Одно простое решение без использования плагинов или изменения файла wp-config.php — это обновить файл functions.php вашей темы и добавить в самое начало следующий код:

<?php

 //Файл functions.php WordPress
  if(!session_id()) {           
    session_start();            
  }

Поскольку functions.php (также называемый файлом функций темы) — это шаблон, автоматически включаемый в темы WordPress, который работает как плагин для вашего сайта. Более того, если у вас установлено больше одной темы на сайте, изменение functions.php затронет только выбранную тему, а не все (где вы, возможно, не хотите включать сесии).

29 окт. 2021 г. 14:38:30
1
-3

WordPress поддерживает это.

Вам нужно добавить следующие строки в начало файла functions.php:

if ( ! session_id() ) {
    session_start();
}
2 нояб. 2011 г. 08:53:59
Комментарии

Зачем вам начинать сессию дважды?

kaiser kaiser
16 нояб. 2012 г. 13:45:39