CakePHP - Quản lý phiên

Phiên cho phép chúng tôi quản lý những người dùng duy nhất trên các yêu cầu và lưu trữ dữ liệu cho những người dùng cụ thể. Dữ liệu phiên có thể được truy cập ở mọi nơi, mọi nơi, nơi bạn có quyền truy cập vào đối tượng yêu cầu, tức là, các phiên có thể truy cập được từ bộ điều khiển, chế độ xem, trình trợ giúp, ô và thành phần.

Truy cập đối tượng phiên

Đối tượng phiên có thể được tạo bằng cách thực thi đoạn mã sau.

$session = $this->request->session();

Viết dữ liệu phiên

Để viết một cái gì đó trong phiên, chúng ta có thể sử dụng write() session phương pháp.

Session::write($key, $value)

Phương thức trên sẽ nhận hai đối số, valuekey dưới đó giá trị sẽ được lưu trữ.

Thí dụ

$session->write('name', 'Virat Gandhi');

Đọc dữ liệu phiên

Để truy xuất dữ liệu được lưu trữ từ phiên, chúng tôi có thể sử dụng read() session phương pháp.

Session::read($key)

Hàm trên sẽ chỉ nhận một đối số, đó là the key of the value,được sử dụng tại thời điểm ghi dữ liệu phiên. Khi đã cung cấp đúng khóa, thì hàm sẽ trả về giá trị của nó.

Thí dụ

$session->read('name');

Khi bạn muốn kiểm tra xem dữ liệu cụ thể có tồn tại trong phiên hay không, thì bạn có thể sử dụng check() session phương pháp.

Session::check($key)

Hàm trên sẽ chỉ lấy khóa làm đối số.

Thí dụ

if ($session->check('name')) {
   // name exists and is not null.
}

Xóa dữ liệu phiên

Để xóa dữ liệu khỏi phiên, chúng tôi có thể sử dụng delete() session phương pháp xóa dữ liệu.

Session::delete($key)

Hàm trên sẽ chỉ lấy khóa của giá trị bị xóa khỏi phiên.

Thí dụ

$session->delete('name');

Khi bạn muốn đọc và sau đó xóa dữ liệu khỏi phiên, chúng tôi có thể sử dụng consume() session phương pháp.

static Session::consume($key)

Hàm trên sẽ chỉ lấy khóa làm đối số.

Thí dụ

$session->consume('name');

Hủy một phiên

Chúng tôi cần hủy phiên người dùng, khi người dùng đăng xuất khỏi trang web và hủy phiên destroy() phương pháp được sử dụng.

Session::destroy()

Thí dụ

$session->destroy();

Việc hủy phiên sẽ xóa tất cả dữ liệu phiên khỏi máy chủ, nhưng sẽ không xóa cookie phiên.

Gia hạn phiên

Trong một tình huống, khi bạn muốn gia hạn phiên người dùng, chúng tôi có thể sử dụng renew() session phương pháp.

Session::renew()

Thí dụ

$session->renew();

Hoàn thành phiên

Thực hiện các thay đổi trong config/routes.php như được hiển thị trong chương trình sau đây.

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();
});

Tạo một SessionsController.php nộp tại src/Controller/SessionsController.php. Sao chép mã sau vào tệp bộ điều khiển

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();
   }
}
?>

Tạo một thư mục Sessions tại src/Template và trong thư mục đó tạo một View tệp được gọi là write_session_data.php. Sao chép mã sau vào tệp đó.

src/Template/Sessions/write_session_data.php

The data has been written in session.

Tạo ra một cái khác View tệp được gọi là retrieve_session_data.php dưới cùng Sessions và sao chép mã sau vào tệp đó.

src/Template/Sessions/retrieve_session_data.php

Here is the data from session.
Name: <?=$name;?>

Tạo ra một cái khác View tệp được gọi là check_session_data.ctp trong cùng một thư mục Phiên và sao chép mã sau vào tệp đó.

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;?>

Tạo ra một cái khác View tệp được gọi là delete_session_data.ctp, trong cùng một thư mục Phiên và sao chép mã sau vào tệp đó.

src/Template/Sessions/delete_session_data.ctp

Data deleted from session.

Tạo ra một cái khác View tệp được gọi là destroy_session_data.ctp, trong cùng một thư mục Phiên và sao chép mã sau vào tệp đó.

src/Template/Sessions/destroy_session_data.ctp

Session Destroyed.

Đầu ra

Thực hiện ví dụ trên bằng cách truy cập URL sau. URL này sẽ giúp bạn ghi dữ liệu trong phiên.

http: // localhost / cakephp4 / session-write

Truy cập URL sau to read session data − http://localhost/cakephp4/session-read

Truy cập URL sau to check session data - http: // localhost / cakephp4 / session-check

Truy cập URL sau to delete session data - http: // localhost / cakephp4 / session-delete Truy cập

Truy cập URL sau to destroy session data - http: // localhost / cakephp4 / session-kill