我应该在哪里将新会话放入我的项目中?

时间:2014-07-16 03:36:45

标签: php class session

我正在创建帖子公告项目。 在这里,我创建了Session class来管理session

我的index.php

$bulletin = new Controller_Bulletin();
$bulletin->setParams(array_merge($_GET, $_POST));
$bulletin->execute('index'); // Execute index action

我的Controller_Bulletin.php

class Controller_Bulletin extends Controller_Base
{
  ...
  public function index() // My index action
  {
    // Render the index html
    $this->render('bulletin/index.php', get_defined_vars());
  }

  public function insert() // My insert action
  {
    ...
  }
  ...
}

我的Session class

class Session
{
  public function __construct()
  {
    session_start();
  }
  ...
}

我需要在每个动作中加载Session类。 示例:index,insert等 但是当我把$session = new Session();放在每个动作中时。 我的导师说这不好。 也许是因为我在每一个动作中都重复了它。 Controller_Bulletin class

中的示例
public function index()
{
  $session = new Session();
  ...
}

public function insert()
{
  $session = new Session();
  ...
}

我对OOP仍然不太满意。 有人能告诉我应该在哪里调用会话对象吗? 如果我的问题仍然不明确,请告诉我。

2 个答案:

答案 0 :(得分:0)

您可以在每个操作上加载$session = new Session();。但为此,您必须对public function __construct()进行一些小改动。将您的功能更改为

public function __construct()
{
if(session_id() === ""){
     session_start();
}
}

这将检查之前是否有任何会话。如果是这样,它将不会重新开始并且不会出现任何错误。

答案 1 :(得分:0)

怎么样这样呢

class Controller_Bulletin extends Controller_Base {

    protected $session;

    public function __construct() {
        parent::__construct();
        $this->session = new Session();
    }

    public function index() { // My index action
        // Render the index html
        // use $this->session here
        $this->render('bulletin/index.php', get_defined_vars());
    }

    public function insert() { // My insert action
        // use $this->session here
    }

}