- 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)
上述函式只接受鍵作為引數。
示例
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 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/Template/Sessions/write_session_data.php
The data has been written in session.
在相同的Sessions目錄下建立另一個名為retrieve_session_data.php的檢視檔案,並將以下程式碼複製到該檔案中。
src/Template/Sessions/retrieve_session_data.php
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執行上述示例。此URL將幫助您寫入會話資料。
https:///cakephp4/session-write
訪問以下URL讀取會話資料 − https:///cakephp4/session-read
訪問以下URL檢查會話資料 − https:///cakephp4/session-check
訪問以下URL刪除會話資料 − https:///cakephp4/session-delete 訪問
訪問以下URL銷燬會話資料 − https:///cakephp4/session-destroy