2009-09-17 16 views
21

Zakładam stronę za pomocą WordPressa i chciałbym umieścić ją na swoich sesjach. Ale nie znajduję żadnych wtyczek, ani nawet dokumentacji. Jakieś sugestie lub referencje, zanim zacznę je hakować?Zarządzanie sesją Wordpress

Uwaga: Pytam o to, czy iw jaki sposób WP używa standardowych sesji PHP, a nie jak dodawać sesje PHP, np. using session_start(). Najwyraźniej każdy stan WP utrzymuje się za pomocą innych środków. Więc jeśli chcę korzystać z sesji PHP, muszę dodać i utrzymać go całkowicie, używając technik podobnych do tych w wątku.

Dzięki!

+0

Lepsze rozwiązanie tutaj: http://wordpress.stackexchange.com/a/72744/20261 – dino

Odpowiedz

15

Widzieliście to? http://www.thinkingoutloud.co.za/content/20091012/php_wordpress_and_session

WordPress nie wydaje się, aby zadzwonić session_start() ponieważ chce być bezpaństwowcem a jeśli register_globals jest zdefiniowana, to automatycznie niszczy $_SESSION

+0

Dzięki - dowiedziałem się, że możesz wywołać session_start() samodzielnie w wp_config, który nie zostanie nadpisany przez aktualizacje. Ale lepiej niż to, używam wp_config do tworzenia instancji singleton klasy "Context", której używam do przechowywania mnóstwa rzeczy, które dodaję (w tym np. Rozszerzonych tablic autoryzacji użytkowników itd.) I może wywołać session_start(). Twoje odwołanie wyjaśniło to dla mnie. (Teraz muszę zachować wp_settings z jego łatą, aby zachować $ _SESSION, albo użyć skonsolidowanej tablicy "$ input" lub pozwolić "Context" utrzymywać i aktualizować zmienne sesji.) Nienawidzę tego kiedy to robią. – dkretz

+1

Link jest martwy, ale znajduje się on w komputerze powrotnym https://web.archive.org/web/20161021035452/http://www.thinkingoutloud.co.za/content/20091012/php_wordpress_and_session – Kaktus

2

Wordpress wydaje się nie używać żadnych sesji.

Najlepszym sposobem na zrobienie tego jest użycie haczyków akcji, które zapewnia.

+1

Jesteś całkowicie niepoprawny, Anraiki. ** Wordpress z pewnością korzysta z Sesji **. Ponadto, jeśli chcesz użyć własnych niestandardowych wartości sesji, wykonaj następujące czynności: Musisz dodać następujące linie u góry 'wp-config.php' if (! Session_id()) { session_start(); } Następnie dodaj następującą linię u góry 'header.php' session_start(); – Alvin

+3

WordPress używa plików cookie, a nie sesji. –

5

Na co muszę zrobić, najlepszą odpowiedzią dotyczy:

  1. Aby umożliwić cookie wordpress utrzymują subdomen, zainstaluj root Cookie plugin.
  2. sub1.domain.com ma wordpress; sub2.domain.com to inna strona. Z drugiej strony (sub2), czytałem cookies w celu identyfikacji, który użytkownik jest i jeśli użytkownik jest zalogowany

ciasteczka są w następujący sposób:.

[wordpress_909bb230b32f5f0473202684d863b2e0] => mshaffer|1255298821|d0249fced9c323835c5bf7e84ad3ffea 
[wordpress_logged_in_909bb230b32f5f0473202684d863b2e0] => mshaffer|1255298821|56e9c19541ecb596a1fa0995da935700 

Korzystanie z PHP, Potrafię przeglądać pliki cookie, analizować pary key=>value. Te pliki cookie informują mnie, że plik [mshaffer] ma plik cookie zapisany w wordpress, a także jest uwierzytelniany jako logged_in. Wygaśnięcie pliku cookie to 1255298821.

W sub2, mogę kwerendy bazy danych WordPress i chwycić Info o użytkownikach:

SELECT * FROM `wp_users` WHERE user_login = 'mshaffer' ... grab USER_ID, user_email z tego zapytania

SELECT * FROM `wp_usermeta` WHERE user_id = '$user_id' ... zgarnij wiele innych danych z WP

Dzięki tym informacjom mogę dodać do mojej zmiennej sesji/cookie sub2 i zrobić wh na chcę z danymi. Mogę zidentyfikować, czy jestem zalogowany, i moja nazwa użytkownika ... co pozwala mi pobrać wiele różnych danych. Mogę teraz używać uwierzytelniania WordPress w moim sub2.domain.com i odpowiednio przekierować.

monte

{x:

+0

Pamiętaj, że nie możesz polegać na tym, że plik cookie jest oryginalny. Mogę wysłać twoją stronę ciasteczko z dowolną nazwą użytkownika. Długi łańcuch szesnastkowy jest (jak sądzę) kryptograficzną sumą kontrolną, którą trzeba przeanalizować, aby upewnić się, że plik cookie został ustawiony przez WordPress. – Tamlyn

+0

Oczywiście Tamlyn można podać dodatkowe sól/pieprz w ciasteczku i dodatkowe kontrole w porównaniu. – mshaffer

16

To bardzo zły pomysł, aby zmodyfikować WP Rdzeń plików za możliwość korzystania z sesji. Najlepszym sposobem, jaki znalazłem, jest wywołanie haka akcji session_start() z init.

function kana_init_session() { 
    session_start(); 
} 

add_action('init', 'kana_init_session', 1); 

Możesz umieścić go w pliku functions.php swojego motywu.

Szczegółowy artykuł można znaleźć tutaj: http://www.kanasolution.com/2011/01/session-variable-in-wordpress/

5

Rozważ użycie WordPress Transient API

wartości zapisanych za pomocą Transient API są widoczne dla wszystkich użytkowników, a nie tylko dla bieżącego użytkownika, w zależności od unikalnego identyfikatora na uzyskiwanie Przejściowe można przypisać każdemu użytkownikowi unikalny identyfikator, powodując, że przejściowy zachowuje się bardzo podobnie do sesji.

Dalsze rozważania:

  • zależności od konfiguracji użytkownicy z obiektu pamięci podręcznej, itp nieustalone mogą nie zawsze być przechowywane w DB (np memcached), wykorzystując przejściowe dla sesji może oznaczać że dane mogą uzyskać dużą objętość i wypełnić pamięć szybko (przy użyciu memcached).

  • Ponadto, wydaje się, że WP nie robi auto zbieranie śmieci na nieustalonych: https://wordpress.stackexchange.com/questions/6602/are-transients-garbage-collected

1

Umieść ten kod w wp-config.php w pierwszej linii:

if (!session_id()) { 
    session_start(); 
} 

Umieść ten kod w nagłówku theme.php w pierwszej linii:

session_start(); 

Następnie zachowa wszystkie zmienne sesji.

1

Jeśli chcesz użyć własnych wartości sesji, Wordpress obsługuje go.

Trzeba dodać następujące linie na górze wp-config.php

if (!session_id()) { 
    session_start(); 
} 

Następnie dodać następujący wiersz na górze header.php

session_start(); 
1

Podłączanie funkcji z session_start() na wp_loaded wydaje się działać w tym przypadku.