CakePHP的会话管理
会话允许我们通过请求来管理唯一的用户,并为特定用户存储数据。会话数据在任何可访问组件的地方都可以得到,即可从控制器,视图,助手类,元类和组件访问。
访问会话对象
会话对象可以通过执行下面的代码来创建。
$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();
完整的会话
<?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
