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ố, value và key 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