WordPress不使用PHP会话,因此WordPress本身不能与您的会话工作或不考虑您是否登录(我认为)。
尝试呼叫session_start()
在…上init
操作,而不是在模板文件中执行,并确保在加载自定义库之前调用它。此外,在用户登录和用户注销时结束PHP会话以开始新的会话也很有趣:
add_action(\'init\', \'cyb_start_session\', 1);
add_action(\'wp_logout\', \'cyb_end_session\');
add_action(\'wp_login\', \'cyb_end_session\');
function cyb_start_session() {
if( ! session_id() ) {
session_start();
// now you can load your library that use $_SESSION
}
}
function cyb_end_session() {
session_destroy();
}
因为你图书馆的电话
session_start()
, 避免自己调用它,但仍需要加载库
init
并在登录/注销时销毁会话:
add_action(\'init\', \'cyb_start_session\', 1);
add_action(\'wp_logout\', \'cyb_end_session\');
add_action(\'wp_login\', \'cyb_end_session\');
function cyb_start_session() {
// load your libreary here (assuming it calls session_start())
}
function cyb_end_session() {
session_destroy();
}
关键是在输出任何内容之前,尽早启动PHP会话。在…上
init
优先级1是最早在WP环境中完成的。如果您以前这样做过,则可以通过以下方式销毁会话:
wp_unregister_GLOBALS().
一个简单而愚蠢但有效的例子:
add_action(\'init\', \'cyb_start_session\', 1);
add_action(\'wp_logout\', \'cyb_end_session\');
add_action(\'wp_login\', \'cyb_end_session\');
function cyb_start_session() {
if( ! session_id() ) {
session_start();
// now you can use $_SESSION
$_SESSION[\'test\'] = "test";
}
}
function cyb_end_session() {
session_destroy();
}
// This will print array(1) { ["test"]=> string(4) "test" }
// above the content of any post
add_filter( \'the_content\', function( $content ) {
var_dump($_SESSION);
return $content;
} );