2013-08-21 44 views
2

我非常新的CakePHP和整个MVC框架。我的问题是在我的网站中整合会话的最佳场所在哪里。CakePHP的会话设计

我想作为一个用户访问该网站,以尽快启动一个会话,并检查它是否有效,如果用户每次调用控制器之前登录(通过会话属性)。

我应该把检查在AppController的有效会话的逻辑是什么?如果是的话我该怎么做,因为没有实例化AppController,所以我不能使用$ this-> html-> session()。

非常感谢

+0

会议是存储的形式,这应该给你相当不错的主意何处以及如何被使用。 –

+0

的[AuthComponent(http://book.cakephp.org/2.0/en/core-libraries/components/authentication.html)将最有可能处理在默认情况下你的所有要求。 – user221931

回答

1

你是在正确的轨道上,但再看看在documentation on Sessions.

你想使用$this->Session->read/write/check/etc

CakePHP会始终启动一个会话,如果你已经包括了会话组件和大多数情况下,这正是你想要的。在AppController中,您只需告诉CakePHP使用Session组件。

事情是这样的......

public $components = array(
     'Session', 
     'RequestHandler', 
     'Cookie' 
    ); 

然后包含助手以及...

public $helpers = array('Html', 'Form', 'Session'); 

现在,你准备好摇滚。

+1

嘿亚伦,欢呼的信息,但我怎么能检查'$ this->会话 - >有效()'每个控制器的结果,而不把它放在每个控制器? – Paul

+0

KevinCoder在他的回答中介绍了这一点,但它在文档中可能并不明显 - 您也可以在AppController中使用'beforeFilter()'方法。如果我没有记错的话,这里唯一的'gotcha'将会是如果你在扩展控制器中声明一个'beforeFilter()',你将需要调用'parent :: beforeFilter();' – Aaron

0

要存储在会话中的值:

$this->Session->write("myvalue"); 

阅读从会话值:

$this->Session->read("myvalue"); 

您还可以检查是否值是使用设置:

$this->Session->check("myvalue"); 

您还可以使用beforeFilters在你的控制器来阻止访问控制:

public function beforeFilter(){ 
    parent::beforeFilter(); 
    if(!$this->Session->check("id")){ 
     $this->redirect("https://stackoverflow.com/users/login"); 
} 
} 

或者只是将上述内容包装在私有方法中,并在要控制访问的所有操作的第一行中调用该方法。