如何在CakePHP中创建,编写和读取会话数据?

时间:2009-07-07 08:31:24

标签: cakephp session

任何人都可以举例说明如何创建会话并向其写入数据。我已经看到了如何使用write命令将数据写入会话的语法。但是如何创建会话并检索其中的值。

在我的应用程序中,我有两个数据,需要在所有页面请求中使用form_id和user_id。那么如何将其保存为会话变量并在整个应用程序中使用它?

修改

function register()
{
    $userId=$this->User->registerUser($this->data);
    $this->Session->write('User.UserId',$userId);
    //echo "session".$this->Session->read('User.UserId');
    $this->User->data=$this->data;
    if (!$this->User->validates())
    {
    $this->Flash('Please enter valid inputs','/forms' );
      return;   
    }

$this->Flash('User account created','/forms/homepage/'.$userId);            

}   

如何在$ this-> Flash中使用会话变量'User.UserId'而不是$ userId('用户帐户已创建','/ forms / homepage /'。 $用户id );

我可以在所有视图文件中使用此变量,因为在所有页面请求中我还传递了userId吗?

编辑2

我有2个控制器,用户和表单。我将userid写入用户 _controller中的会话变量。我有一个名为homepage.ctp的视图文件,其操作在forms_controller中。现在我如何使用主页中users_controller中定义的会话变量?对不起,如果我问愚蠢的问题。我浏览了蛋糕书,但我的怀疑并没有被清除。我也在尝试编写错误的编码方法,所以请帮助我。

编辑3

我有一个会话变量'uid',它是控制器主页操作中的用户ID。

       $this->Session->write('uid',$this->data['Form']['created_by']);

我需要在同一个控制器的设计动作方法中使用相同的变量。 当我给出

             $uid=$this->Session->read('uid');
            echo "uid: ".$uid;

该值未被回显。

我不能在同一个控制器中使用会话变量吗?

8 个答案:

答案 0 :(得分:8)

面包店是你最好的朋友:

http://book.cakephp.org/view/398/Methods

所有会话读/写都属于控制器:

$this->Session->write('Person.eyeColor', 'Green');

echo $this->Session->read('Person.eyeColor'); // Green

答案 1 :(得分:2)

您不必编写任何代码来创建会话,它们已经内置。然后您只需使用上面提到的读写会话。另请参阅此处了解更多详情:

http://book.cakephp.org/2.0/en/core-libraries/components/sessions.html 用于控制器

http://book.cakephp.org/2.0/en/core-libraries/helpers/session.html 在视图中使用

答案 2 :(得分:2)

在Cake php中,您可以创建这样的会话

$this->request->session()->write('user_id', 10);

您可以像这样读取会话值

echo $this->request->session()->read('user_id');

超级简单!

答案 3 :(得分:2)

cakephp 4控制器,视图和单元中会话使用的示例

$session = $this->request->getSession();
$session->write('abc', 'apple');
echo $session->read('abc');

答案 4 :(得分:0)

在这种情况下,它将是:

$this->Flash('User account created','/forms/homepage/'.$this->Session->read('User.UserId'));

你的第二个问题由Jason Miy解答(http://api.cakephp.org/class/session-helper)。您可以在视图中使用它:

$userId = $session->read('User.UserId');

慢慢地仔细阅读适当的食谱页面通常会有很多帮助...

答案 5 :(得分:0)

我发现了uid没有被回应的原因(编辑问题的3部分)。 这是由于一个愚蠢的错误,在结束标记之后有一个空格?>在控制器中。现在工作正常。

答案 6 :(得分:0)

当我有奇怪的会话行为时,这对我很有帮助。

MODEL:

 function clearAllDBCache() {
    $db =& ConnectionManager::getDataSource($this->useDbConfig);
    $db->_queryCache = array();
   }

`

答案 7 :(得分:0)

lib/Cake/View/Helper/SessionHelper.php中访问你的Helper SessionHelper并添加方法:

public function write($name = null) {
    return CakeSession::write($name);
}