Sessions và Cookies trong Yii2

0
504

Khi cần truyền dữ liệu người dùng qua nhiều lần request ta thường sử dụng sessions và cookies .Yii2 hỗ trợ đầy đủ các tính năng đó thông qua 2 biến toàn cầu là $_SESSION và $_COOKIE

1 Sessions

Sessions được lưu trữ ở trên webserver .Giống như request và responses bạn có thể truy cập vào sessions chỉnh sửa và thêm bớt

1.1 Mở và đóng Sessions

Dưới đây là đoạn mã cơ bản để bạn có thể làm việc với session trong 1 phiên 1 cách nhanh chóng

$session = Yii::$app->session;

// check if a session is already open
if ($session->isActive) ...

// mở session
$session->open();

// đóng sessions
$session->close();

// destroys all data registered to a session.
$session->destroy();

Ví dụ đầy đủ về sessions bạn có thể xem dưới đây .File Controllers

<?php
namespace frontend\controllers;
use yii\base\Controller;
use Yii;
class SessiondemoController extends Controller
{
	public function actionIndex()
	{
		$session = \Yii::$app->session;
		$session->open();
		$session->set('name','Nguyễn Anh Hiến');
		$session->close();
		return $this->render('index');
	}
	public function actionView()
	{
		$session = \Yii::$app->session;
		$name = $session->get('name');
		echo $name;
	}
}

File view index.php

<?php
use yii\helpers\Html;
?>
<p>Demo sessions va cookies</p>
<?= Html::a('Link demo session',['sessiondemo/view']); ?>

Qua ví dụ trên mình mong các bạn có thể hình dung ra phần nào việc sử dụng session .Lưu ý nếu bạn muốn lưu session người dùng Yii2 đã có component user nhé .

Còn bạn muốn sử dụng sessions hàng 1 lần .Dùng xong quay mặt đi như chưa hề quen biết hãy sử dụng Flash vừa nhanh vừa an toàn 99% nha cả nhà .

$session->addFlash('testFlash','Hello đây là test flash');
ở file view 
<?= Alert::widget([
   'options' => ['class' => 'alert-info'],
   'body' => Yii::$app->session->getFlash('testFlash'),
]);

Vậy là xong .Ok giờ là lúc chúng ta chuyển sang phần cookies

2 Cookies

Cookies là phần mà chúng ta gửi khách hàng giữ hộ .Mà cái gì người khác giữ hộ thì đều không an toàn bằng chúng ta vì vậy chúng ta chỉ nên lưu giữ những phần không quan trọng ở phía khách hàng thôi nhé .

Dưới đây là ví dụ dùng cookies bạn có thể tham khảo của mình

<?php
namespace frontend\controllers;
use yii\base\Controller;
use yii\web\Cookie;

class CookiesController extends Controller
{
	public function actionIndex()
	{
		$cookies = \Yii::$app->response->cookies;
		$cookies->add(new \yii\web\Cookie([
    'name' => 'nguyen_anh_hien',
    
]));
		return $this->render('index');
	}	
	public function actionView()
	{
		$cookies = \Yii::$app->request->cookies;
		echo $cookies['cookieValidationKey'];
	}
}