CakePHP的会话管理

2018-01-19 15:06 更新

会话允许我们通过请求来管理唯一的用户,并为特定用户存储数据。会话数据在任何可访问组件的地方都可以得到,即可从控制器,视图,助手类,元类和组件访问。

访问会话对象

会话对象可以通过执行下面的代码来创建。

$session = $this->request->session();

写入会话数据

在会话中写入数据,我们可以使用write()方法 。

Session::write($key, $value)

上述方法有两个参数:和该键下存储的 。

$session->write('name', 'Virat Gandhi');

读取会话数据

若要从会话中检索存储的数据,我们可以使用read()方法 。

Session::read($key)

上述方法只有一个参数,就是在写入数据时使用的键 。一旦正确的提供了正确的键,那么函数将返回其值。

$session->read('name');

当您要检查会话是否存在特定的数据,那么你可以使用check()方法 。

Session::check($key)

上述方法只需要一个参数:键。

if ($session->check('name')) {
   // name exists and is not null.
}

删除会话数据

若要从会话中删除数据,我们可以使用delete()方法删除数据。

Session::delete($key)

上述方法只有一个参数:需要删除的值的键。

$session->delete('name');

当你想先读取数据,然后删除数据的话,我们就可以使用consume()方法 。

static Session::consume($key)

上述方法只有一个参数:键。

$session->consume('name'); 

销毁会话

当用户从网站登出时,我们需要销毁会话,可以使用destroy()方法。

Session::destroy()

$session->destroy();

销毁会话将删除服务器中的所有会话数据,但不会删除会话cookie。

更新会话

若要续订用户会话,我们就可以使用renew()方法。

Session::renew()

$session->renew();

完整的会话

修改config/routes.php文件如下:
config/routes.php
<?php
   use CakeCorePlugin;
   use CakeRoutingRouteBuilder;
   use CakeRoutingRouter;

   Router::defaultRouteClass('DashedRoute');
   Router::scope('/', function (RouteBuilder $routes) {
      $routes->connect('/sessionobject',
         ['controller'=>'Sessions','action'=>'index']);
      $routes->connect('/sessionread',
         ['controller'=>'Sessions','action'=>'retrieve_session_data']);
      $routes->connect('/sessionwrite',
         ['controller'=>'Sessions','action'=>'write_session_data']);
      $routes->connect('/sessioncheck',
         ['controller'=>'Sessions','action'=>'check_session_data']);
      $routes->connect('/sessiondelete',
         ['controller'=>'Sessions','action'=>'delete_session_data']);
      $routes->connect('/sessiondestroy',
         ['controller'=>'Sessions','action'=>'destroy_session_data']);
      $routes->fallbacks('DashedRoute');
   });
   Plugin::routes();

src/Controller/目录下创建一个SessionsController.php文件。复制以下代码至其中。

src/Controller/SessionsController.php

<?php
   namespace AppController;
   use AppControllerAppController;

   class SessionsController extends AppController{
      public function retrieveSessionData(){
         //create session object
         $session = $this->request->session();
      
         //read data from session
         $name = $session->read('name');
         $this->set('name',$name);
      }
      public function writeSessionData(){
         //create session object
         $session = $this->request->session();
         
         //write data in session
         $session->write('name','Virat Gandhi');
      }
      public function checkSessionData(){
         //create session object
         $session = $this->request->session();
      
         //check session data
         $name = $session->check('name');
         $address = $session->check('address');
         $this->set('name',$name);
         $this->set('address',$address);
      }
      public function deleteSessionData(){
         //create session object
         $session = $this->request->session();
         
         //delete session data
         $session->delete('name');
      }
      public function destroySessionData(){
         //create session object
         $session = $this->request->session();
         
         //destroy session
         $session->destroy();
      }
   }
?>

src/Template目录下创建一个Sessions目录,并在该Sessions目录下创建一个名为write_session_data.ctp视图文件。复制以下代码至其中。

src/Template/Sessions/write_session_data.ctp

The data has been written in session.

在该Sessions目录下创建另一个名为retrieve_session_data.ctp视图文件。复制以下代码至其中
src/Template/Sessions/retrieve_session_data.ctp

Here is the data from session.
Name: <?=$name;?>

在该Sessions目录下创建另一个名为check_session_data.ctp视图文件,复制以下代码至其中。

src/Template/Sessions/check_session_data.ctp
<?php if($name): ?>
name exists in the session.

<?php else: ?>
name doesn't exist in the database

<?php endif;?>
<?php if($address): ?>
address exists in the session.

<?php else: ?>
address doesn't exist in the database

<?php endif;?>

在该Sessions目录下创建另一个名为delete_session_data.ctp视图文件,复制以下代码至其中。

src/Template/Sessions/delete_session_data.ctp

Data deleted from session.

在该Sessions目录下创建另一个名为destroy_session_data.ctp视图文件,复制以下代码至其中。

src/Template/Sessions/destroy_session_data.ctp

Session Destroyed.

输出

通过访问以下网址执行上面的例子。此URL将帮助你在会话上写入数据。

http://locaohost:85/CakePHP/session-write


请访问以下网址读取会话数据 - http://locaohost:85/CakePHP/session-read


请访问以下网址查询会话数据 - http://locaohost:85/CakePHP/session-check


请访问以下网址中删除会话数据 - http://locaohost:85/CakePHP/session-delete


请访问以下网址销毁会话数据 - http://locaohost:85/CakePHP/session-destroy



以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号