【问题标题】:PHP Sessions in WordPressWordPress 中的 PHP 会话
【发布时间】: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() ) {两者都正常工作并且循环进入函数内部吗?

标签: php wordpress


【解决方案1】:

首先,不要在不检查会话是否已经启动的情况下使用 session_start()。

例子:

if (!session_id()) {
  session_start();
}

其次,不要在“wp”钩子中使用它。在 init 钩子或 template_redirect 钩子中使用它。

例子:

add_action('init', 'yourclass');

如果问题仍然存在,请告诉我,但我相信您会解决您的问题并停止使用这两个 tweek 重置会话。 :)

【讨论】:

  • 我使用了一个答案来回应,它被放在你的答案之前。我不想让你不注意到它。
【解决方案2】:

用户854993,

我已经尝试了这两个想法,但都没有成功。在初始化钩子中我有

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 值存储在用户元变量中,其中用户是主要的超级管理员(我)。应该是稳定的,没有这些问题

你怎么看?

【讨论】:

    猜你喜欢
    • 2011-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-17
    • 1970-01-01
    • 1970-01-01
    • 2011-11-10
    相关资源
    最近更新 更多