Як використовувати власне спеціальне значення сеансу в Wordpress?


17

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

Я вже вставив session_start()усі сторінки, які мені потрібні, наступні.

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

Але не працює глобально.
Просто працюю над самої сторінкою.
Глобально НЕ можна телефонувати з інших сторінок (використовуючи ту ж логіку).


Чи можете ви уточнити специфіку WordPress свого питання?
Чіп Беннетт

1
" Який характер має WordPress? " - це означає, яким чином ваше питання пов'язане з WordPress ?
Чіп Беннетт

1
Я бачу запитання щодо файлів cookie сеансу . Я не бачу нічого конкретного для WordPress , тому я попросив роз'яснити.
Чіп Беннетт

2
Ні. Сесії та файли cookie є загальною темою Інтернет / веб-браузера, щодо якої WordPress є повністю агностичним.
Чіп Беннетт

5
Так, сеанси та файли cookie є загальною темою, але це більше питання про те, щоб зробити сеанси роботи з WordPress ... а оскільки сам WP не використовує сеанси, це актуально тут.
EAMann

Відповіді:


13

РЕДАКТУВАТИ: "ПЛЮГІН НІЖ НЕ ДОСТУПНИЙ, ТАКОЖ ЗАБУДУЙТЕ ВИКОРИСТОВУВАТИ ПЛУГІН: Плагін WordPress Session "

Є хороший плагін WordPress, адаптований з класу сесії CodeIgniter: WP Sessions Plugin .

Коли ви активуєте плагін, ви можете почати використовувати $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"]

Я сподіваюся, що це комусь допомагає.


1
Плагін WP Sessions не існує! ??
Кірен Сіва

1
Так, ви хочете скористатись цим: wordpress.org/plugins/wp-session-manager (Це набагато краще та стабільніше).
beytarovski


Чому ми не можемо використовувати функцію сеансу PHP за замовчуванням у WordPress? Це рішення створює залежність від плагіна.
Амріт

@Amritpal, оскільки не всі PHP / Apache сервери підтримують сеанси. Якщо ви хочете створити публічне програмне забезпечення / плагін типу WP, вам доведеться подумати над цим. Якщо його особистий проект, де ви можете редагувати сервер, це не проблема.
бейтаровський

8

WordPress не використовує сеанси, тому змінні сеансу не працюють.

Власне кажучи, якщо визначені певні змінні, WordPress фактично знищиться, $_SESSIONщоб утримати себе без стану .

Але якщо ви дійсно хочете використовувати сеанси, спробуйте додати session_start()на початку wp-config.phpфайлу. Це (сподіваємось) запускає сеанси щоразу, коли WP запускається, тож ви зможете встановити та прочитати свої $_SESSIONзмінні в інших місцях системи.


Я бачив, що Wordpress використовує файли cookie для зберігання деяких даних для входу. Коли я надрукував масив $ _COOKIE, я міг побачити деякі дані. Я хотів би встановити ці дані вручну. Більш детальна інформація тут: stackoverflow.com/questions/21595900 / ...
shasi Kanth

1
Також рекомендується змінити файл wp-config.php, щоб розпочати сеанс? Якщо ми оновлюємо Wordpress пізніше, чи також файл wp-config.php оновлюється?
shasi kanth

Підручник, який обговорює це більше 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();
}

10
Чому ви б розпочали сесію двічі?
кайзер
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.