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

17

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

Я уже вставил session_start()на все страницы, которые мне нужны, как показано ниже.

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

Но не работает в глобальном масштабе.
Просто работаю над собственной страницей.
Он НЕ доступен для вызова глобально с других страниц (используя ту же логику).

夏 期 劇場
источник
Не могли бы вы уточнить характер вашего вопроса для WordPress ?
Чип Беннетт
1
« Что такое характер WordPress? » - это означает, каким образом ваш вопрос связан с WordPress ?
Чип Беннетт
1
Я вижу вопрос о сессионных куки . Я не вижу ничего конкретного для WordPress , поэтому я попросил разъяснений.
Чип Беннетт
2
Нет. Сессии и файлы cookie - это общие темы в Интернете и веб-браузерах, в отношении которых WordPress абсолютно независим.
Чип Беннетт
5
Да, сессии и файлы cookie являются общими темами, но это больше вопрос обеспечения работы сессий с WordPress ... и, поскольку сам WP не использует сессии, это актуально здесь.
EAMann

Ответы:

13

РЕДАКТИРОВАТЬ: "ПЛАГИН НИЖЕ НЕДОСТУПНЫ ДЛЯ ВАС, ПОЖАЛУЙСТА, ИСПОЛЬЗУЙТЕ ЭТО ПЛАГИН ВМЕСТО: Плагин для WordPress Session "

Есть хороший плагин WordPress, адаптированный из класса CodeIgniter Session: плагин WP Sessions .

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

global $session;

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

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

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

// One value
$session->set_userdata( 'username', 'john' );

// Passing array
$array = array(
    'username' => 'john',
    'email'    => 'john@gmail.com'
);

$session->set_userdata( $array );

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

$session->userdata( 'username' );

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

$session->all_userdata(); // returns array

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

$session->unset_userdata( 'username' );

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

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

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

// Add Flashdata
$session->set_flashdata( 'item', 'value' );

// Retrieve Flashdata
$session->flashdata( 'item' );

// Preserving flashdata 
// (if you need to preserve flashdata through an additional request, 
// you can use this function):
$session->keep_flashdata( 'item' );

Чтобы уничтожить сессию:

$session->sess_destroy();

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

[session key="username"]

Чтобы добраться до второго ключа:

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

Я надеюсь, что это помогает кому-то.

beytarovski
источник
1
Плагин WP Sessions не существует! ??
Кирен Шива
1
Да, вы захотите использовать это: wordpress.org/plugins/wp-session-manager (это намного лучше и стабильнее).
Бейтаровский
Другой плагин wordpress.org/plugins/wp-native-php-sessions
nu everest
Почему мы не можем использовать функциональность сеанса PHP по умолчанию в WordPress? Это решение создает зависимость от плагина.
Амрит
@Amritpal, потому что не все серверы PHP / Apache поддерживают сессии. Если вы хотите создать общедоступное программное обеспечение / плагин, такой как WP, вы должны подумать об этом. Если это личный проект, где вы можете редактировать сервер, это не проблема.
Бейтаровски
8

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

Фактически, если определенные переменные определены, WordPress фактически уничтожит $_SESSIONих, оставив их без сохранения состояния .

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

EAMann
источник
Я видел, что Wordpress использует Cookies для хранения некоторых данных для входа. Когда я печатал массив $ _COOKIE, я мог видеть некоторые данные. Я хотел бы установить эти данные вручную. Более подробная информация здесь: stackoverflow.com/questions/21595900/…
Шаси Кант
1
Также рекомендуется изменить файл wp-config.php, чтобы начать сеанс? Если мы обновим Wordpress позже, обновится ли файл wp-config.php?
Шаси Кант
Учебник, в котором обсуждается этот более silvermapleweb.com/using-the-php-session-in-wordpress
nu everest
1
@shasikanth нет, wp-cofnig.phpне касается обновлений.
Т.Тодуа
1
@shasikanth wp-config.phpне будет обновляться, иначе вы можете потерять соединение с БД и другие параметры, которые вы установили вручную.
Эренор Пас
-5

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

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

if ( ! session_id() ) {
    session_start();
}
Alvin
источник
10
Зачем вам начинать сессию дважды?
Кайзер