【问题标题】:PHP store session data in classPHP在类中存储会话数据
【发布时间】:2013-06-10 02:45:28
【问题描述】:

我正在将 PHP 会话变量存储到数据库中,但存在一些问题。我想知道你们是否可以给我一个更好的解决方案,或者如果我的理解有任何问题,请告诉我。谢谢。

首先,我将用户输入存储在 PHP 会话变量中。我还不能将此会话数据插入数据库,因为我需要等待另一个用户输入(此输入将与会话数据同时插入数据库)。会话有时间限制(60 秒)。我需要一个地方来临时存储会话数据。如果会话结束,数据就消失了。

我认为存储会话数据的地方将是对象。也许制作一个类来存储会话数据。当用户给出另一个输入时,从该对象中提取数据并插入到数据库中。我没有在PHP中使用过任何面向对象的概念,所以我想知道这个过程是否可行。

非常感谢。

【问题讨论】:

  • 我想我不明白你在这里真正想要做什么。为什么不将会话数据存储在会话中?换句话说,既然已经有了会话存储,为什么还要制作一些类似会话的存储呢?当您获得第二个输入(需要触发数据库插入)时,只需从会话中获取所需的信息并将其与此输入信息一起插入到数据库中。您是否需要将会话数据本身(不与输入数据结合)存储在数据库中?
  • 是的,我将会话数据插入数据库两次。一旦我插入会话数据,我需要将这些会话数据与输入数据相结合。(单独的表)。我担心用户输入第二个输入时会话时间已经结束,所以我丢失了该会话数据。这就是为什么我在考虑另一种存储。
  • 您的会话到期不会因为您将会话数据存储在数据库中而改变。如果您将所有会话处理程序更改为使用数据库,会话仍将根据您的会话超时设置过期。
  • “会话有时间限制(60 秒)。我需要一个临时存储会话数据的地方。” - 这不就是会话是 - 临时数据存储机制吗?我不知道你的实际问题是什么——如果 60 秒的会话寿命还不够,那为什么不直接设置呢?

标签: php database class session


【解决方案1】:

我处理会话的方式是使用单例模式:

class Session {
    private static $_instance;
    private $id;
    private $data;

    private function __clone() {}
    private function __construct() {
        session_start();

        $this->id   = session_id();
        $this->data =& $_SESSION;
    }

    public static function open() {
        if ( ! (self::$_instance instanceof self)) {
            self::$_instance = new self();
        }

        return self::$_instance;
    }

   public function __set($name, $value) {
     $this->data[$name] = $value;
   }

   public function __get($name) {
     return isset($this->data[$name]) ? $this->data[$name] : null;
   }
}

这样,您的会话数据将存储在 $data 变量中,并可通过重载访问。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多