Jak korzystać z własnej wartości sesji niestandardowej w Wordpress?

17

Jak mogę użyć własnej (niestandardowej) wartości sesji w Wordpress?
Na przykład:$_SESSION['myname']="4lvin"

Mam już wstawioną session_start()na wszystkich stronach potrzebuję, jak następuje.

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

Ale nie działa globalnie.
Po prostu działam na własnej stronie.
NIE można wywoływać globalnie z innych stron (przy użyciu tej samej logiki).

夏 期 劇場
źródło
Czy możesz wyjaśnić charakter pytania związany z WordPress ?
Chip Bennett
1
Jaka jest natura specyficzna dla WordPress? ” - to znaczy, w jaki sposób twoje pytanie jest związane z WordPress ?
Chip Bennett
1
Widzę pytanie o sesyjne pliki cookie . Nie widzę nic konkretnego dla WordPress , dlatego poprosiłem o wyjaśnienia.
Chip Bennett
2
Nie. Sesje i pliki cookie to ogólne tematy dotyczące Internetu / przeglądarki internetowej, wobec których WordPress jest całkowicie agnostyczny.
Chip Bennett
5
Tak, sesje i pliki cookie są ogólnymi tematami, ale chodzi raczej o to, aby sesje działały z WordPress ... a ponieważ sama WP nie używa sesji, jest to istotne tutaj.
EAMann,

Odpowiedzi:

13

EDYCJA: „PONIŻSZA WTYCZKA NIE JEST DOSTĘPNA, NALEŻY UŻYWAĆ TEGO, ŻE WTYCZKA ZAINSTALOWAĆ: Wtyczka sesji WordPress

Istnieje dobra wtyczka WordPress zaadaptowana z klasy CodeIgniter Session: WP Sessions Plugin .

Po aktywowaniu wtyczki możesz zacząć używać $sessionobiektu z dowolnego miejsca w motywie ( $sessionobiekt tak długi, jak globalny). Na przykład, aby użyć obiektu sesji $ do header.phppliku, wystarczy dodać ten kod:

global $session;

Jeśli jesteś programistą wtyczek i chcesz dostosować tę wtyczkę do swojej, możesz również znaleźć wersję autonomiczną w pakiecie. Dokumentacja wtyczki zawiera więcej informacji dla programistów wtyczek o tym, jak dostosować się do projektu.

Oto kilka przydatnych funkcji dla twórców motywów i wtyczek.

Możesz dodać dane sesji w ten sposób:

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

// Passing array
$array = array(
    'username' => 'john',
    'email'    => '[email protected]'
);

$session->set_userdata( $array );

Aby pobrać dane sesji:

$session->userdata( 'username' );

Aby uzyskać wszystkie dane sesji:

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

Aby usunąć jeden element z sesji:

$session->unset_userdata( 'username' );

Aby usunąć więcej elementów z sesji:

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

Możesz także użyć Flashdata, czyli danych sesji, które będą dostępne tylko dla następnego żądania serwera, a następnie zostaną automatycznie usunięte. Mogą one być bardzo przydatne, gdy używasz ich do komunikatów informacyjnych lub statusu (np. „Produkt został usunięty”).

// 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' );

Aby zniszczyć sesję:

$session->sess_destroy();

Wtyczka obsługuje także skróty . Możesz wydrukować dowolne dane sesji na swoich postach lub stronach:

[session key="username"]

Aby przejść do drugiego klucza:

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

Mam nadzieję, że to komuś pomoże.

beytarovski
źródło
1
Wtyczki WP Sessions nie ma!
Kiren Siva,
1
Tak, będziesz chciał użyć tego: wordpress.org/plugins/wp-session-manager (To jest znacznie lepsze i stabilne).
beytarovski
Dlaczego nie możemy korzystać z domyślnej funkcjonalności sesji PHP w WordPress? To rozwiązanie tworzy zależność od wtyczki.
Amrit
@Amritpal, ponieważ nie wszystkie serwery PHP / Apache obsługują sesje. Jeśli chcesz zbudować publiczne oprogramowanie / wtyczkę, takie jak WP, musisz o tym pomyśleć. Jeśli jest to osobisty projekt, w którym możesz edytować serwer, nie stanowi to problemu.
beytarovski
8

WordPress nie używa sesji, dlatego zmienne sesji nie działają.

W rzeczywistości, jeśli określone zmienne zostaną zdefiniowane, WordPress faktycznie zniszczy się, $_SESSIONaby pozostać bezstanowym .

Ale jeśli naprawdę chcesz korzystać z sesji, spróbuj dodać session_start()na początku wp-config.phppliku. Spowoduje to (miejmy nadzieję) rozpoczęcie sesji przy każdym uruchomieniu WP, więc będziesz mógł ustawić i odczytać swoje $_SESSIONzmienne gdzie indziej w systemie.

EAMann
źródło
Widziałem, że Wordpress używa plików cookie do przechowywania niektórych danych logowania. Kiedy wydrukowałem tablicę $ _COOKIE, mogłem zobaczyć niektóre dane. Chciałbym ustawić te dane ręcznie. Więcej informacji tutaj: stackoverflow.com/questions/21595900/…
shasi kanth
1
Czy zaleca się również zmodyfikowanie pliku wp-config.php, aby rozpocząć sesję? Jeśli później zaktualizujemy Wordpress, czy plik wp-config.php również zostanie zaktualizowany?
shasi kanth
Samouczek, który omawia to więcej silvermapleweb.com/using-the-php-session-in-wordpress
nu everest
1
@shasikanth nie, wp-cofnig.phpnie dotyczy aktualizacji.
T.Todua
1
@shasikanth wp-config.phpnie zostanie zaktualizowany, w przeciwnym razie możesz utracić połączenie z DB i inne parametry, które ustawiłeś ręcznie.
Erenor Paz
-5

Wordpress obsługuje to .

Musisz dodać następujące wiersze u góryfunctions.php

if ( ! session_id() ) {
    session_start();
}
Alvin
źródło
10
Dlaczego miałbyś rozpocząć sesję dwa razy?
kaiser