CakePHP 會話管理

WBOY
發布: 2024-09-10 17:26:38
原創
605 人瀏覽過

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.phpView 文件,並將下列程式碼複製到該檔案中。

src/Template/Sessions/retrieve_session_data.php

Here is the data from session.
CakePHP 會話管理: =$name;?>
登入後複製

在同一 Sessions 目錄下建立另一個名為 check_session_data.ctpView 文件,並將以下程式碼複製到該文件中。

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

Written in Session

存取以下 URL 讀取會話資料 - http://localhost/cakephp4/session-read

CakePHP 會話管理

訪問以下 URL 檢查會話資料 - http://localhost/cakephp4/session-check

CakePHP 會話管理 Exists

存取以下 URL 刪除會話資料 - http://localhost/cakephp4/session-delete 存取

Delete From Session

存取以下 URL 銷毀會話資料 - http://localhost/cakephp4/session-destroy

CakePHP 會話管理

以上是CakePHP 會話管理的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!