是的,您可以这样做,但除非挂接到init或admin\\u init(或在发送标头之前的其他位置),否则您将收到有关已发送标头的错误。我还没有对其进行测试,但您可以将会话函数挂接到send_headers
行动1 这似乎是自会话以来最合适的位置,因为它最终将发送头。
在模板页面上,如果您在调用之前启动会话,我认为它会起作用get_header()
.
下面是我之前构建的插件的一个示例。
设置会话:
// Must run session_start() during admin_init to use $_SESSION variables later
add_action(\'admin_init\',\'register_session\');
function register_session() {
if( !session_id()
&& current_user_can( \'manage_options\' )
&& current_user_can( \'client_tools\' ) )
session_start();
session_unset();
}
这是一个函数的一部分,用于在需要会话变量的地方设置它们。
// Update notifications
add_action( \'admin_post_mmc_update_notification\', \'mmc_update_notification\' );
function mmc_update_notification() {
//Check the nonce
check_admin_referer( \'mmc_notification_nonce\' );
// Set a session variable
if ( isset( $_POST[ \'client-manager-lname\' ] ) )
$_SESSION[\'client-manager-lname\'] = $_POST[\'client-manager-lname\'];
}
这允许我在该插件的子菜单页上使用这些会话变量,如下所示:
//Define variables to be used in search results. Make sure each is set first.
if( isset($_SESSION[\'client-manager-lname\'])
&& $_SESSION[\'client-manager-lname\'] != \'\' ) {
$last_name = $_SESSION[\'client-manager-lname\'];
}
当不再需要时,可以在脚本末尾取消设置会话变量
unset ($_SESSION[\'varname\']);
. 所有会话变量都可以用
session_unset();
如果您需要确保为每个会话设置新的变量,而没有之前会话的剩余内容,那么最好在会话开始后立即运行。
使用销毁会话session_destroy();
.
我建议阅读PHP: session_unset - Manual.
更新:我更仔细地研究了您考虑使用PHP会话的原因,并看到了混合Web开发人员的答案。当您的用户通过登录(验证)时,可以选择记住凭据wp_signon()
2.
如上所述,始终使用wp_nonce_field()
3 并使用wp_verify_nonce()
4 在表单处理脚本中。
我碰巧在WordPress中看到一篇关于Cookie和PHP会话的好文章,其中概述了一些依赖$\\u会话变量的缓存和安全相关问题。Other Stuff Archives - WP Engine
总而言之,似乎最好尽可能避免在WordPress中使用PHP会话。在某些情况下,最好通过瞬态API存储临时数据5.