【发布时间】:2017-01-21 04:20:32
【问题描述】:
我对 PHP 会话的理解是,它们让我们可以跟踪网站上页面之间的变量。但我似乎看到了与 WordPress 不同的东西。我的functions.php文件中有下面的钩子:
add_action( 'wp', 'sa_clear_session_email' );
function sa_clear_session_email() {
if ( ! is_page( 'Pricing ' ) )
return;
$ret = session_start();
if ($ret) {
$s_id = session_id();
trace("M20D:Pricing page. Started session $s_id");
}
else {
trace("M20E:Pricing page. Unable to start session");
}
unset( $_SESSION['user_email'] );
因此,如果这是定价页面,代码会打开一个会话并清除“user_email”变量。
在functions.php中也是
add_action( 'wp', 'woa_add_membership_auto_on_checkout' );
function woa_add_membership_auto_on_checkout() {
if ( ! is_page( 'checkout' ) || ! is_checkout() ) {// is_checkout() returns true if viewing the checkout page
return;
}
$ret = session_start();
if ($ret) {
$s_id = session_id();
trace("M9F:Started session $s_id");
}
else {
trace("M9F:Unable to start session");
}
$email = $_SESSION['user_email'];
此代码等待结帐页面,然后尝试使用在第一个代码中打开的会话。 我遇到的问题是,即使我在第一个钩子函数中清除了“user_email” 第二个没有清除,原因是我在第一个代码中得到的 session_id 不是我在第二个代码中得到的 session_id。
有人知道这里发生了什么吗?
谢谢。
【问题讨论】:
-
通常,
init操作用于启动会话。如果这不起作用,则可能是您的服务器没有正确保存会话。 -
你能检查 if (!is_page( 'Pricing ') ) 和 if ( !is_page( 'checkout' ) || !is_checkout() ) {两者都正常工作并且循环进入函数内部吗?