我对PHP会话的理解是,它们让我们跟踪站点上页面之间的变量。但我似乎看到了与WordPress不同的东西。我在我的functions.php文件中有以下钩子:
public boolean onOptionsItemSelected(MenuItem item)
{
int id = item.getItemId();
if (id == android.R.id.home)
{
yourResideMenu.getResideMenu().openMenu(ResideMenu.DIRECTION_LEFT);
}
return super.onOptionsItemSelected(item);
}
因此,如果这是“定价”页面,则代码会打开会话并清除“user_email”变量。
同样在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” 它在第二个中没有被清除,原因是我在第一个代码中得到session_id 不是我在第二个代码中得到的session_id。
有谁知道这里发生了什么?
感谢。
答案 0 :(得分:1)
首先,不要在没有检查会话已启动的情况下使用session_start()。
示例:
if (!session_id()) {
session_start();
}
其次,不要在" wp"钩。在init hook OR template_redirect hook中使用它。
示例:
add_action('init', 'yourclass');
如果问题仍然存在,请告诉我,但我相信您将解决您的问题,并停止使用这两个tweek重置会话。 :)
答案 1 :(得分:1)
user854993,
我尝试过这两种想法,却没有成功。在init钩子里我有
add_action('init', 'myStartSession', 1);
function myStartSession() {
if(!session_id()) {
session_start();
}
$s_id = session_id();
trace("M00C:init hook: session_id is $s_id" );
}
但是跟踪线表明这会多次执行,几乎每次session_id都不同时执行:
我准备放弃尝试使用WordPress会话,而是将user_email值存储在用户元变量中,其中用户是主要的superadmin(me)。这应该是稳定的,没有这些问题
您怎么看?