如何在wordpress中不使用$_SESSION的情况下使用session
How to use session without using $_SESSION in wordpress
我试图在不使用 php $_SESSION
变量且不让用户登录网站的情况下创建会话。我创建了一个表单,一旦 visitor/guest 用户提交了表单,我想将他的数据存储在一个会话变量中。我发现在 wordpress 中使用 $_SESSION
不是一个好习惯。我查看了一些教程,发现可以使用 WP_Session
。这似乎也不适合我。
这是我使用的代码:
global $wp_session;
$wp_session['visitorInfo'] = 'some_text_here';
当我在另一个页面上请求它时,它什么也没给我(空白)。即使我尝试打印 $wp_session
变量,它也会给我空白。我也尝试使用 $wp_session = WP_Session::get_instance();
,但 returns 我的错误是 Class WP_Session not found
可能是因为我正在为调用此方法的 class 使用命名空间。
我也试过
add_action('init',array($this,'start_session'));
public function start_session(){
if (!session_id()) { session_start();}
}
但它不起作用。
我的网站托管在 wpengine 上,它不允许创建自定义 cookie。我想弄清楚用户登录网站时 wordpress 如何创建会话。我一直在寻找过去 2 天的解决方案,但没有找到任何有效的解决方案。
你能告诉我如何实现这个目标吗?
非常感谢!
使用 init
挂钩 session_start()
在没有 WP Engine 的普通服务器上工作正常。
示例代码:
<?php
/**
* Plugin Name: Session plugin.
*/
add_action('init', 'sesp_init');
function sesp_init()
{
if (session_status() === PHP_SESSION_NONE) {
session_start();
}
$_SESSION['hello'] = 'world';
}
add_action('template_redirect', 'sesp_template');
function sesp_template()
{
echo 'hello ' . $_SESSION['hello'].'<br>';
}
首页上写着 hello world。
WP_Session
class WP_Session
不是 WordPress 核心 class。除了 WP_Session_Token
之外,我在 WordPress 核心文件的任何地方都找不到这个 class 但这不是用于会话使用。
class WP_Session
来自 WP Session Manager plugin (refer from this question)。您必须安装该插件才能访问 WP_Session
。否则会出现这个错误。
Class WP_Session not found
使用Transients.
来自文档。
WordPress Transients API, which offers a simple and standardized way of storing cached data in the database temporarily
因此,如果 session_start()
不能正常工作并且您不想安装其他插件,您可以使用它作为替代方案。
示例代码:
add_action('init', 'sesp_init');
function sesp_init()
{
set_transient('sesp_hello', 'moon', 60*5);// 5 minutes.
}
add_action('template_redirect', 'sesp_template');
function sesp_template()
{
echo 'hello ' . get_transient('sesp_hello') . ' (use transient).<br>';
}
您无需挂接到 init
即可设置瞬态。以上代码为例。 set_transient()
中的第三个参数是以秒为单位的过期时间。
临时警告!
但是,短暂的不是像会话这样的一个访问者。您必须正确设置并检查您获得的瞬态和设置是否适合某个人。
WP 引擎
来自他们的 support page.
The biggest problem this presents is due to the unique session IDs. Unique IDs effectively bust cache and causes every session to become uncached. This will cause serious performance issues for your site.
您可以切换到使用 PHP cookie or disable WP Engine cache. This was .
我试图在不使用 php $_SESSION
变量且不让用户登录网站的情况下创建会话。我创建了一个表单,一旦 visitor/guest 用户提交了表单,我想将他的数据存储在一个会话变量中。我发现在 wordpress 中使用 $_SESSION
不是一个好习惯。我查看了一些教程,发现可以使用 WP_Session
。这似乎也不适合我。
这是我使用的代码:
global $wp_session;
$wp_session['visitorInfo'] = 'some_text_here';
当我在另一个页面上请求它时,它什么也没给我(空白)。即使我尝试打印 $wp_session
变量,它也会给我空白。我也尝试使用 $wp_session = WP_Session::get_instance();
,但 returns 我的错误是 Class WP_Session not found
可能是因为我正在为调用此方法的 class 使用命名空间。
我也试过
add_action('init',array($this,'start_session'));
public function start_session(){
if (!session_id()) { session_start();}
}
但它不起作用。
我的网站托管在 wpengine 上,它不允许创建自定义 cookie。我想弄清楚用户登录网站时 wordpress 如何创建会话。我一直在寻找过去 2 天的解决方案,但没有找到任何有效的解决方案。
你能告诉我如何实现这个目标吗?
非常感谢!
使用 init
挂钩 session_start()
在没有 WP Engine 的普通服务器上工作正常。
示例代码:
<?php
/**
* Plugin Name: Session plugin.
*/
add_action('init', 'sesp_init');
function sesp_init()
{
if (session_status() === PHP_SESSION_NONE) {
session_start();
}
$_SESSION['hello'] = 'world';
}
add_action('template_redirect', 'sesp_template');
function sesp_template()
{
echo 'hello ' . $_SESSION['hello'].'<br>';
}
首页上写着 hello world。
WP_Session
class WP_Session
不是 WordPress 核心 class。除了 WP_Session_Token
之外,我在 WordPress 核心文件的任何地方都找不到这个 class 但这不是用于会话使用。
class WP_Session
来自 WP Session Manager plugin (refer from this question)。您必须安装该插件才能访问 WP_Session
。否则会出现这个错误。
Class WP_Session not found
使用Transients.
来自文档。
WordPress Transients API, which offers a simple and standardized way of storing cached data in the database temporarily
因此,如果 session_start()
不能正常工作并且您不想安装其他插件,您可以使用它作为替代方案。
示例代码:
add_action('init', 'sesp_init');
function sesp_init()
{
set_transient('sesp_hello', 'moon', 60*5);// 5 minutes.
}
add_action('template_redirect', 'sesp_template');
function sesp_template()
{
echo 'hello ' . get_transient('sesp_hello') . ' (use transient).<br>';
}
您无需挂接到 init
即可设置瞬态。以上代码为例。 set_transient()
中的第三个参数是以秒为单位的过期时间。
临时警告!
但是,短暂的不是像会话这样的一个访问者。您必须正确设置并检查您获得的瞬态和设置是否适合某个人。
WP 引擎
来自他们的 support page.
The biggest problem this presents is due to the unique session IDs. Unique IDs effectively bust cache and causes every session to become uncached. This will cause serious performance issues for your site.
您可以切换到使用 PHP cookie or disable WP Engine cache. This was