问题描述

如何在 Wordpress 中使用自己的 (自定义) 会话值?例如:$_SESSION['myname']="4lvin"

我已经在所有页面上插入了 session_start(),我需要如下。

<?php
session_start();
$_SESSION['myname'] = "4lvin";
?>

但不工作 Global-wise 。只是在自己的页面上工作。它不是 call-able 在全球从另一个页面 (使用相同的逻辑) 。

最佳解决方案

编辑:「下面的插件不可用,所以请使用该插件:WordPress Session Plugin

有一个很好的 WordPress 插件改编自 CodeIgniter Session 类:WP Sessions Plugin

激活插件时,您可以从主题中的任何位置开始使用 $session 对象 ($session 对象只要全局) 。例如,要在 header.php 文件中使用 $ session 对象,只需添加以下代码:

global $session;

If you are a plugin developer and you want to adapt this plugin with yours, you can find standalone version in the package as well. Documentation of the plugin gives more information for plugin developers about how to adapt to your project.

这是主题和插件开发人员的一些有用的功能。

您可以添加如下所示的会话数据:

// One value
$session->set_userdata( 'username', 'john' );

// Passing array
$array = array(
    'username' => 'john',
    'email'    => 'john@gmail.com'
);

$session->set_userdata( $array );

检索会话数据:

$session->userdata( 'username' );

获取所有会话数据:

$session->all_userdata(); // returns array

从会话中删除一个项目:

$session->unset_userdata( 'username' );

从会话中删除更多项目:

$array = array(
    'username' => '',
    'email'    => ''
);
$session->unset_userdata( $array );

您也可以使用 Flashdata,该数据是只能用于下一个服务器请求的会话数据,然后会自动清除。当您将其用于信息或状态消息 (例如 「产品已被删除」) 时,这些功能非常有用。

// Add Flashdata
$session->set_flashdata( 'item', 'value' );

// Retrieve Flashdata
$session->flashdata( 'item' );

// Preserving flashdata
// (if you need to preserve flashdata through an additional request,
// you can use this function):
$session->keep_flashdata( 'item' );

破坏会话:

$session->sess_destroy();

该插件还支持短码。您可以在您的帖子或页面上打印任何会话数据:

[session key="username"]

达到第二个关键:

[session key="user_data" sec_key="display_name"]

我希望这有助于某人。

次佳解决方案

WordPress 不使用会话,这就是为什么你的会话变量不工作。

事实上,如果定义了某些变量,WordPress 实际上会破坏 $_SESSION 来保持自身的无状态。

但是,如果您真的想使用会话,请尝试在 wp-config.php 文件的开头添加 session_start()。每当 WP 启动时,这将 (希望) 启动会话,因此您可以在系统中的其他位置设置和读取 $_SESSION 变量。

参考文献

注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。