Session 允許我們跨請求管理唯一用戶,並儲存特定用戶的資料。會話資料可以在任何地方訪問,只要您可以存取請求對象,即可從控制器、視圖、助手、單元格和元件存取會話。
可以透過執行以下程式碼來建立Session物件。
$session = $this->request->session();
要在會話中寫入內容,我們可以使用 write() session 方法。
Session::write($key, $value)
上述方法將採用兩個參數,值和鍵,值將儲存在其下方。
$session->write('name', 'Virat Gandhi');
要從會話中擷取儲存的數據,我們可以使用 read() session 方法。
Session::read($key)
上面的函數只接受一個參數,即值的鍵,它是在寫入會話資料時使用的。一旦提供了正確的密鑰,該函數將返回其值。
$session->read('name');
當你想檢查會話中是否存在特定資料時,可以使用 check() session 方法。
Session::check($key)
上面的函數只接受 key 作為參數。
if ($session->check('name')) { // name exists and is not null. }
要從會話中刪除數據,我們可以使用delete() session方法來刪除數據。
Session::delete($key)
上述函數將只取得要從會話中刪除的值的鍵。
$session->delete('name');
當你想要從會話中讀取資料然後刪除資料時,我們可以使用 consume() session 方法。
static Session::consume($key)
上面的函數只接受 key 作為參數。
$session->consume('name');
我們需要銷毀使用者會話,當使用者從網站登出並銷毀會話時,使用 destroy() 方法。
Session::destroy()
$session->destroy();
銷毀工作階段將從伺服器中刪除所有會話數據,但不會刪除會話 cookie。
在您想要續訂使用者會話的情況下,我們可以使用 renew() session 方法。
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 並在該目錄下建立一個 View 文件,名稱為 write_session_data.php。 複製以下程式碼位於該檔案中。
src/Template/Sessions/write_session_data.php
The data has been written in session.
在同一個 Sessions 目錄下建立另一個名為 retrieve_session_data.php 的 View 文件,並將下列程式碼複製到該檔案中。
src/Template/Sessions/retrieve_session_data.php
Here is the data from session. CakePHP 會話管理: =$name;?>
在同一 Sessions 目錄下建立另一個名為 check_session_data.ctp 的 View 文件,並將以下程式碼複製到該文件中。
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, 的 View 文件,並將以下程式碼複製到該文件中。
src/Template/Sessions/delete_session_data.ctp
Data deleted from session.
在同一 Sessions 目錄下建立另一個名為 destroy_session_data.ctp, 的 View 文件,並將以下程式碼複製到該文件中。
src/Template/Sessions/destroy_session_data.ctp
Session CakePHP 會話管理.
透過造訪以下 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
以上是CakePHP 會話管理的詳細內容。更多資訊請關注PHP中文網其他相關文章!