CakePHP-세션 관리

세션을 통해 요청 전체에서 고유 사용자를 관리하고 특정 사용자에 대한 데이터를 저장할 수 있습니다. 세션 데이터는 요청 개체에 액세스 할 수있는 곳 어디에서나 액세스 할 수 있습니다. 즉, 컨트롤러, 뷰, 도우미, 셀 및 구성 요소에서 세션에 액세스 할 수 있습니다.

세션 개체에 액세스

다음 코드를 실행하여 세션 객체를 생성 할 수 있습니다.

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

세션 데이터 쓰기

세션에서 무언가를 작성하려면 write() session 방법.

Session::write($key, $value)

위의 메서드는 두 개의 인수를받습니다. value 그리고 key 아래에 값이 저장됩니다.

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

세션 데이터 읽기

세션에서 저장된 데이터를 검색하려면 read() session 방법.

Session::read($key)

위의 함수는 하나의 인수 만 취합니다. the key of the value,세션 데이터를 쓸 때 사용되었습니다. 올바른 키가 제공되면 함수는 해당 값을 반환합니다.

$session->read('name');

특정 데이터가 세션에 존재하는지 여부를 확인하려면 다음을 사용할 수 있습니다. check() session 방법.

Session::check($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)

위의 함수는 키만 인수로 사용합니다.

$session->consume('name');

세션 삭제

사용자가 사이트에서 로그 아웃 할 때 사용자 세션을 파괴하고 세션을 파괴해야합니다. destroy() 방법이 사용됩니다.

Session::destroy()

$session->destroy();

세션을 삭제하면 서버에서 모든 세션 데이터가 제거되지만 세션 쿠키는 제거되지 않습니다.

세션 갱신

사용자 세션을 갱신하려는 상황에서 우리는 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();
});

만들기 SessionsController.php 파일 src/Controller/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();
   }
}
?>

디렉토리 생성 Sessions ...에서 src/Template 그 디렉토리 아래에 View 라는 파일 write_session_data.php. 해당 파일에 다음 코드를 복사하십시오.

src/Template/Sessions/write_session_data.php

The data has been written in session.

다른 만들기 View 라는 파일 retrieve_session_data.php 같은 아래 Sessions 해당 파일에 다음 코드를 복사하십시오.

src/Template/Sessions/retrieve_session_data.php

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

다른 만들기 View 라는 파일 check_session_data.ctp 동일한 Sessions 디렉토리 아래에서 해당 파일에 다음 코드를 복사합니다.

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

다른 만들기 View 라는 파일 delete_session_data.ctp, 동일한 Sessions 디렉토리 아래에서 해당 파일에 다음 코드를 복사합니다.

src/Template/Sessions/delete_session_data.ctp

Data deleted from session.

다른 만들기 View 라는 파일 destroy_session_data.ctp, 동일한 Sessions 디렉토리 아래에서 해당 파일에 다음 코드를 복사합니다.

src/Template/Sessions/destroy_session_data.ctp

Session Destroyed.

산출

다음 URL을 방문하여 위의 예를 실행하십시오. 이 URL은 세션에서 데이터를 쓰는 데 도움이됩니다.

http : // localhost / cakephp4 / session-write

다음 URL을 방문하십시오 to read session data − http://localhost/cakephp4/session-read

다음 URL을 방문하십시오 to check session data − http : // localhost / cakephp4 / session-check

다음 URL을 방문하십시오 to delete session data − http : // localhost / cakephp4 / session-delete

다음 URL을 방문하십시오 to destroy session data − http : // localhost / cakephp4 / session-destroy