我正在使用Wordpress建立一个网站,我想捎带它的会话。但我找不到任何插件,甚至文档。在我开始攻击它之前有任何建议或参考吗?
注意:我问的是WP是否以及如何使用标准PHP会话本身,而不是如何添加PHP会话,例如使用session_start()。显然任何WP所维持的状态都是通过其他方式完成的。因此,如果我想使用PHP会话,我需要使用线程中的技术完全自己添加和维护它。
全部谢谢!
答案 0 :(得分:17)
修改 WP Core 文件以使用会话的能力是一个非常糟糕的主意。我找到的最好方法是从session_start()
操作挂钩调用init
。
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/
答案 1 :(得分:15)
WordPress似乎没有调用session_start()
因为它想成为无状态
如果定义了register_globals
,它会自动销毁您的$_SESSION
答案 2 :(得分:5)
对于我需要做的事情,最好的答案包括:
我的cookies如下:
[wordpress_909bb230b32f5f0473202684d863b2e0] => mshaffer|1255298821|d0249fced9c323835c5bf7e84ad3ffea
[wordpress_logged_in_909bb230b32f5f0473202684d863b2e0] => mshaffer|1255298821|56e9c19541ecb596a1fa0995da935700
使用PHP,我可以遍历cookie,解析key=>value
对。这些Cookie让我知道[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中,并根据数据执行我想要的操作。我可以确定我是否已登录,以及我的用户名...这让我抓住了很多不同的数据。我现在可以在 sub2.domain.com 中使用WordPress身份验证,并相应地重定向。
蒙
{X:
答案 3 :(得分:5)
使用Transient API存储的值对所有用户都可见,而不仅仅是当前用户,具体取决于用于检索瞬态的唯一标识符,您可以为每个用户分配一个唯一的标识符,从而导致瞬态行为非常类似于会话。
进一步考虑:
根据具有对象缓存等的用户设置,可能会出现瞬态 并不总是使用瞬态存储在DB(例如memcached)中 会话可能意味着数据可能变得笨重并填补内存 快速(使用memcached)。
此外,似乎WP不进行自动垃圾收集 瞬变: https://wordpress.stackexchange.com/questions/6602/are-transients-garbage-collected
答案 4 :(得分:2)
Wordpress似乎没有使用任何会话。
最好的方法是使用它提供的动作挂钩。
答案 5 :(得分:1)
将此代码放在第一行的wp-config.php中:
if (!session_id()) {
session_start();
}
将此代码放在第一行的主题header.php中:
session_start();
然后它将维护所有会话变量。
答案 6 :(得分:1)
你有没有检查过这里的解决方案,这可能适用于这里和它的简单方法
http://thedigilife.com/wordpress-how-to-set-session-custom-variable-while-login/
答案 7 :(得分:1)
在session_start()
上使用wp_loaded
挂钩功能似乎适用于这种情况。
答案 8 :(得分:0)
如果您想使用自己的会话值, Wordpress确实支持。
您需要在wp-config.php
if (!session_id()) {
session_start();
}
然后在header.php
session_start();