2009-09-17 276 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()似乎在这种情况下工作。