0

今天我有一个关于 cakePHP cookie 的问题。如何告诉 cake php 记住所有应用程序控制器中的 cookie?

我想做简单的协议接受。

例如,我有 2 个控制器。协议和信息页。用户必须接受协议才能在我的应用程序上查看信息页和其他内容。

这是我的协议控制器(仅示例):

class AgreementController extends AppController {
    var $components = array('Cookie'); 

    public function acceptAgreement(){
        $this->Cookie->write('agreements', 'accepted');
    }
}

这是我的页面控制器(仅示例):

class InfopagesController extends AppController {
public function showPage(){
    $cookie = $this->Cookie->read('agreements');
    if($cookie=="accepted"){
        /* CODE TO SHOW PAGE */
    }
    else{
        /* REDIRECT TO AGREEMENTS */
    }
}

如果 cookie 为空,我想将我的应用程序的所有控制器重定向到协议控制器。我尝试这样做,但 cakephp 仅在协议控制器的操作中记住 cookie。

我的 cookie 组件的定义(在协议控制器中)

function beforeFilter() {
  $this->Cookie->name = 'regulamin';
  $this->Cookie->time =  3600;
}

有谁能够帮我?

4

3 回答 3

2

将检查添加到您 AppController::beforeFilter()

   $cookie = $this->Cookie->read('agreements');
   if ($cookie != "accepted" && (get_class($this) != 'YOUR-AGREEMENTS-CONTROLLER' && $this->action != 'AGREEMENTS-ACTION')) {
        /* REDIRECT TO AGREEMENTS */
   }

如果您访问它,请确保您没有重定向到协议页面,如果您不这样做,您最终会出现重定向循环。将我的示例中的条件更改为您需要检查用户是否尝试访问协议页面的任何条件。

还要确保在控制器 beforeFilter() 调用中调用 parent::beforeFilter()。如果您不知道调用父方法或如何正确使用它,请阅读有关 phps OOP 的信息。http://php.net/manual/en/language.oop5.php

于 2012-10-25T18:30:15.093 回答
1

使用会话。Cakephp 网站有一些关于阅读和写作的好信息。见http://book.cakephp.org/2.0/en/development/sessions.html

如果会话为空,还将会话检查放在 beforeFilter() 回调中的 app_controller.php 中以转发所有内容。http://book.cakephp.org/2.0/en/controllers.html

于 2012-10-25T15:41:20.840 回答
0

也许在 InfopagesController 中不起作用,因为您忘记加载 Cookie 组件,正如您在 AgreementController 中所做的那样。

在此之后,在您的 AppController::beforeFilter() 检查:

1)什么是控制器;

2)如果控制器不等于“AgreementController”,则检查用户是否有cookie。

您需要检查是否不等于“AgreementController”,否则会创建无限重定向。

于 2012-10-26T12:17:23.903 回答