【问题标题】:Maintaining state between runs | Session Use在运行之间保持状态 |会话使用
【发布时间】:2011-03-15 19:02:32
【问题描述】:

有不同的方式来运行 PHP 代码。例如用户发起的重新加载和用户发起的 ajax 请求。

在这些运行之间保持状态的最佳方式是什么?

【问题讨论】:

  • 您的 AJAX 处理程序是否加载(或直接命中)index.php?如果这是实例化对象的唯一位置,并且 AJAX 调用不会以任何方式调用 index.php,则不会为您的 AJAX 调用创建对象。

标签: php


【解决方案1】:

PHP 确实认为它是单独运行的。两件事:

  1. 不要使用全局变量...它们很糟糕 :) 考虑让您的“会话”类成为静态函数的集合,其中 session_id 作为静态成员变量。
  2. 只需在您的第二个 sn-p 中创建一个新的会话类:
$obj_ses = new session();
$obj_ses->activate('email', $this->_protected['email']);

会话 ID 在该特定用户的所有页面视图中都是相同的,因此在第二个 sn-p 中创建新 session() 仍将引用您在第一个 sn-p 中启动的同一会话。

下面是静态实现的样子:


// class names should be camel-cased
class SessionManager
{
    protected static $session_id = null;

    public static function start()
    {
        self::$session_id = session_start();
    }

    // ... and so on
}

// to use
SessionManager::start();
SessionManager::activate('email', $email);

这应该就是你所需要的。当然有很多方法可以做到这一点,但这应该让你开始:)

【讨论】:

  • 全局变量,顺便说一句,由于许多原因不好,但它们也不是太有效。
  • 请记住,PHP 本质上是无状态的……请求之间没有共享任何内容……因此一个请求中的静态类不会与另一个请求共享(即使它们是并发的)。我将在上面更新我的答案以回答您的第二个问题
猜你喜欢
  • 2014-06-30
  • 2011-09-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-03
  • 2011-02-15
相关资源
最近更新 更多