2009-09-17 42 views
21

我使用Wordpress搭建一個網站,我想捎帶上了會議。但我沒有找到任何插件,甚至沒有找到文檔。任何建議或參考之前,我開始黑客攻擊?WordPress的會話管理

注:我想諮詢一下是否以及如何WP使用標準的PHP會議本身,而不是如何添加PHP會話例如使用session_start()。顯然任何國家WP維護都是通過其他方式完成的。所以如果我想使用PHP會話,我需要使用類似於線程中的技術完全自己添加和維護它。

謝謝大家!

+0

更好的解決方案在這裏:http://wordpress.stackexchange.com/a/72744/20261 – dino 2012-11-16 13:54:31

回答

15

你見過嗎? http://www.thinkingoutloud.co.za/content/20091012/php_wordpress_and_session

WordPress的似乎不叫session_start()因爲它想成爲無國籍 如果register_globals定義,它會自動破壞你$_SESSION

+0

感謝 - 從我瞭解到,你可以在wp_config中自己調用session_start(),它不會被更新覆蓋。但更好的是,我使用wp_config來實例化一個「Context」類的單例實例,我正在使用它來保存一堆我要添加的東西(包括例如擴展用戶認證表等),並且它可以調用在session_start()。你的參考資料爲我澄清。 (現在我需要用他的補丁維護wp_settings來保留$ _SESSION,否則使用統一的「$ input」數組,或者讓「Context」維護和更新會話變量。)當我們討厭這個時,我討厭它。 – dkretz 2010-03-26 01:43:09

+1

鏈接已死,但它在後備機器https://web.archive.org/web/20161021035452/http://www.thinkingoutloud.co.za/content/20091012/php_wordpress_and_session – Kaktus 2017-07-12 14:40:47

2

WordPress的似乎不使用任何會議。

去了解它,最好的辦法就是用行動掛鉤提供。

+1

你是完全不正確的,Anraiki。 ** Wordpress肯定會使用會話**。另外,如果您想使用自己的自定義會話值,請按照以下方式進行操作: 如果(!session_id()){您需要在wp-config.php的頂部添加以下行: session_start(); } 然後在'header.php' 在session_start頂部添加以下行(); – Alvin 2011-11-02 06:42:59

+3

WordPress使用Cookie,而不是會話 – 2013-03-05 11:10:34

5

爲了什麼,我需要做的,最好的答案包括:

  1. 要允許WordPress的cookie來跨子網域堅持,安裝根的Cookie plugin
  2. sub1.domain.com具有的wordpress; sub2.domain.com是另一個網站。從其他站點(SUB2),我讀了cookie來識別用戶是誰,如果用戶登錄

我的餅乾如下:。

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

使用PHP,我可以遍歷餅乾,解析key=>value對。這些cookies讓我知道[mshaffer]在wordpress上存儲了一個cookie,並且也被認證爲logged_in。該cookie的到期日期爲1255298821

SUB2,我可以查詢的WordPress的數據庫,並獲取用戶信息:

SELECT * FROM `wp_users` WHERE user_login = 'mshaffer' ...user_id說明USER_EMAIL從該查詢

SELECT * FROM `wp_usermeta` WHERE user_id = '$user_id' ...搶很多來自WP等數據

有了這個信息,我可以添加到我的sub2會話變量/ cookie和做wh在我想要的數據。我可以確定我是否已登錄,還有我的用戶名......這讓我抓住了大量不同的數據。我現在可以使用我的sub2.domain.com WordPress的認證,並相應地重定向。

{X:

+0

請記住,您不能依賴cookie爲真品。我可以使用任何用戶名發送您的網站cookie。長十六進制字符串是(我認爲)你需要解析以確保cookie由WordPress設置的加密校驗和。 – Tamlyn 2012-11-28 14:05:06

+0

當然,你可以在曲奇中加入鹽/胡椒粉,並在比較中加入額外的檢查。 – mshaffer 2014-05-23 13:13:51

16

這是一個非常糟糕的主意修改WP核心文件的使用會話的能力。我發現的最佳方法是從init動作鉤調用session_start()

function kana_init_session() { 
    session_start(); 
} 

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

您可以將它放在您的主題的functions.php文件中。

詳細的文章可以在這裏找到:http://www.kanasolution.com/2011/01/session-variable-in-wordpress/

5

考慮使用利用瞬時API存儲WordPress Transient API

值是對所有用戶可見,而不僅僅是當前用戶,這取決於用於檢索的唯一標識符暫時性的,您可以爲每個用戶分配一個唯一的標識符,從而使瞬態行爲非常像會話。

進一步考慮:

  • 取決於用戶的設置與對象緩存等,瞬態可能 並不總是被存儲在數據庫(如memcached的),採用瞬變爲 會議可能意味着數據可能會變得龐大並且會快速填充內存 (在使用memcached時)。

  • 而且,似乎WP不適用於 瞬變做自動的垃圾收集:

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

    https://wordpress.stackexchange.com/questions/6602/are-transients-garbage-collected

1

在第一線將這個代碼的wp-config.php文件將此代碼放在主題的header.php中的第一行:

session_start(); 

然後它會保持所有會話變量。

1

如果你想使用自己的會話值,WordPress的確支持它

您需要在wp-config.php

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

頂部添加以下行然後添加以下在header.php

session_start(); 
1

wp_loaded上掛接功能session_start()似乎在這種情況下工作。