我试图创建一个会话,而不使用php $_SESSION
变量,并没有让用户登录在网站上。我创建了一个表单,一旦访问者/访客用户提交表单,我想将他的数据存储在会话变量中。我发现在wordpress中使用$_SESSION
不是一个好的做法。我看了一些教程,发现使用WP_Session
。这似乎也不适合我。
下面是我使用的代码:
global $wp_session;
$wp_session['visitorInfo'] = 'some_text_here';
当我在另一个页面上请求它时,它什么也不给我(空白)。即使我尝试打印$wp_session
变量,它也会给予我空白。我也尝试了$wp_session = WP_Session::get_instance();
,但它返回了Class WP_Session not found
错误,可能是因为我正在调用这个方法的类中使用命名空间。
我也试着
add_action('init',array($this,'start_session'));
public function start_session(){
if (!session_id()) { session_start();}
}
但它不起作用。
我的网站托管在wpengine上,它不允许创建自定义cookie。我试图弄清楚如何WordPress创建他们的会话时,用户登录到网站。我一直在寻找解决方案,从过去2天,但没有找到任何工作的解决方案。
你能建议我如何才能做到这一点。
多多提前感谢!
1条答案
按热度按时间xxslljrj1#
使用
init
钩子session_start()
在没有WP引擎的普通服务器上工作正常。示例代码:
首页上写着“Hello World”。
WP_Session
WP_Session
类不是WordPress的核心类。除了WP_Session_Token
,我在WordPress核心文件中的任何地方都找不到这个类,但这不是用于会话的。类
WP_Session
来自WP Session Manager plugin(参考this question)。您必须安装该插件才能访问WP_Session
。否则将发生此错误。未找到类WP_Session
使用Transients。
从文件上。
WordPress Transients API,它提供了一种在数据库中临时存储缓存数据的简单和标准化的方法
所以,如果
session_start()
不能正常工作,并且你不想安装其他插件,你可以使用它作为替代。示例代码:
您不需要挂钩到
init
来设置transient。上面的代码就是一个例子。set_transient()
中的第三个参数是以秒为单位的过期时间。transient 警告!
然而, transient 不像会话那样用于一个访问者。你必须设置和检查正确的 transient 你得到和设置是匹配的一个人。
WP引擎
support page的
这带来的最大问题是由于唯一的会话ID。唯一ID有效地破坏了缓存,并导致每个会话变为未缓存。这将导致您的网站出现严重的性能问题。
您可以切换到使用PHP cookie或禁用WP引擎缓存。这是answered here。