- CakePHP 教程
- CakePHP - 主页
- CakePHP - 概述
- CakePHP - 安装
- CakePHP - 文件夹结构
- CakePHP - 项目配置
- CakePHP - 路由
- CakePHP - 控制器
- CakePHP - 视图
- CakePHP - 扩展视图
- CakePHP - 查看元素
- CakePHP - 查看活动
- CakePHP - 使用数据库
- CakePHP - 查看记录
- CakePHP - 更新记录
- CakePHP - 删除一条记录
- CakePHP - 服务
- CakePHP - 错误和异常处理
- CakePHP - 日志记录
- CakePHP - 表单处理
- CakePHP - 国际化
- CakePHP - 会话管理
- CakePHP - Cookie 管理
- CakePHP - 安全性
- CakePHP - 验证
- CakePHP - 创建验证器
- CakePHP - 分页
- CakePHP - 日期和时间
- CakePHP - 文件上传
- CakePHP 有用资源
- CakePHP - 快速指南
- CakePHP - 有用的资源
- CakePHP - 讨论
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)
上面的函数只接受 key 作为参数。
例子
if ($session->check('name')) { // name exists and is not null. }
删除会话数据
要从会话中删除数据,我们可以使用delete()会话方法来删除数据。
Session::delete($key)
上述函数将仅获取要从会话中删除的值的键。
例子
$session->delete('name');
当您想从会话中读取数据然后删除数据时,我们可以使用Consumer() 会话方法。
static Session::consume($key)
上面的函数只接受 key 作为参数。
例子
$session->consume('name');
销毁会话
我们需要销毁用户会话,当用户从站点注销并销毁会话时,将使用destroy()方法。
Session::destroy()
例子
$session->destroy();
销毁会话将从服务器中删除所有会话数据,但不会删除会话 cookie。
续订会话
在您想要续订用户会话的情况下,我们可以使用renew() session方法。
Session::renew()
例子
$session->renew();
完整的会话
在config/routes.php文件中进行更改,如以下程序所示。
配置/routes.php
<?php use Cake\Http\Middleware\CsrfProtectionMiddleware; use Cake\Routing\Route\DashedRoute; use Cake\Routing\RouteBuilder; $routes->setRouteClass(DashedRoute::class); $routes->scope('/', function (RouteBuilder $builder) { $builder->registerMiddleware('csrf', new CsrfProtectionMiddleware([ 'httpOnly' => true, ])); $builder->applyMiddleware('csrf'); //$builder->connect('/pages',['controller'=>'Pages','action'=>'display', 'home']); $builder->connect('/session-object',['controller'=>'Sessions','action'=>'index']); $builder->connect('/session-read',['controller'=>'Sessions','action'=>'retrieve_session_data']); $builder->connect('/session-write',['controller'=>'Sessions','action'=> 'write_session_data']); $builder->connect('/session-check',['controller'=>'Sessions','action'=>'check_session_data']); $builder->connect('/session-delete',['controller'=>'Sessions','action'=>'delete_session_data']); $builder->connect('/session-destroy',['controller'=>'Sessions','action'=>'destroy_session_data']); $builder->fallbacks(); });
在src/Controller/SessionsController.php创建SessionsController.php文件。将以下代码复制到控制器文件中
src/Controller/SessionsController.php
<?php namespace App\Controller; use App\Controller\AppController; class SessionsController extends AppController { public function retrieveSessionData() { //create session object $session = $this->request->getSession(); //read data from session $name = $session->read('name'); $this->set('name',$name); } public function writeSessionData(){ //create session object $session = $this->request->getSession(); //write data in session $session->write('name','Virat Gandhi'); } public function checkSessionData(){ //create session object $session = $this->request->getSession(); //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->getSession(); //delete session data $session->delete('name'); } public function destroySessionData(){ //create session object $session = $this->request->getSession(); //destroy session $session->destroy(); } } ?>
在src/Template处创建一个Sessions目录,并在该目录下创建一个名为 write_session_data.php 的视图文件。将以下代码复制到该文件中。
src/模板/会话/write_session_data.php
The data has been written in session.
在同一Sessions目录下创建另一个名为retrieve_session_data.php的视图文件,并将以下代码复制到该文件中。
src/模板/会话/retrieve_session_data.php
Here is the data from session. Name: <?=$name;?>
在同一 Sessions 目录下创建另一个名为check_session_data.ctp的视图文件,并将以下代码复制到该文件中。
src/模板/会话/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/模板/会话/delete_session_data.ctp
Data deleted from session.
在同一 Sessions 目录下创建另一个名为destroy_session_data.ctp的视图文件,并将以下代码复制到该文件中。
src/模板/会话/destroy_session_data.ctp
Session Destroyed.
输出
通过访问以下 URL 来执行上述示例。该 URL 将帮助您在会话中写入数据。
http://localhost/cakephp4/session-write
访问以下 URL读取会话数据 - http://localhost/cakephp4/session-read
访问以下 URL以检查会话数据- http://localhost/cakephp4/session-check
访问以下 URL来删除会话数据- http://localhost/cakephp4/session-delete 访问
访问以下 URL销毁会话数据- http://localhost/cakephp4/session-destroy