Bài 19: Session và Cookie trong PHP

Bài 19: Session và Cookie trong PHP

Session và Cookie trong PHP chắc chắn không thể thiếu. Đặc biệt với các trang thương mại điện tử họ có thể dùng nó để tạo giỏ hàng, lưu thông tin đăng nhập…

Ở bài trước chúng ta đã được thực hành về form login và register trong PHP rồi, nhưng để lưu thông tin đăng nhập trên trình duyệt thì hôm nay chúng ta sẽ tiếp tục nhé.

Giải thích

Session và Cookie trong PHP được gọi là nơi để lưu trữ các thông tin người dùng trên nhiều trang mà không cần phải khai báo lại.

Đối với Session chỉ được lưu trữ tạm thời khi người dùng tắt trình duyệt thì tất cả các session được lưu trữ sẽ bị xóa.

Còn đối với Cookie bạn có thể lưu trữ theo thời gian do bạn quy định, tắt trình duyệt mở lên cũng không ảnh hưởng gì cả.

Cách sử dụng Session trong PHP

Để bắt đầu một Session trong PHP chúng ta phải khởi động lên bằng lệnh: session_start(); đặt ở ngay đầu code.

Để lưu 1 Session chúng ta dùng cú pháp: $_SESSION[“ten_session”] = “gia_tri”;

Giả sử như bài thực hành phần đăng nhập nếu bạn không lưu lại Session thì chắc chắn khi load lại trang bạn lại đăng nhập lại.

Bây giờ chúng ta sẽ thêm Session vào nhé:

Đầu tiên ta khai báo ở đầu trang để bật Session:

<?php
session_start();
 ?>

Tiếp theo, ở phần đăng nhập thành công chúng ta sẽ lưu lại thông tin đăng nhập:

$_SESSION["user_name"] = $result['user_name'];
$_SESSION["password"] = $result['password'];
$_SESSION["full_name"] = $result['full_name'];
$_SESSION["email"] = $result['email'];
$_SESSION["phone_number"] = $result['phone_number'];

Bạn có thể lưu bao nhiêu session tùy ý nhé.

Tiệp theo trên đầu form đăng nhập chúng ta sẽ kiểm tra session nếu có tồn tại thì ẩn form đăng nhập, hiển thị thông tin và hiện nút “Đăng xuất” lên nhé:

<?php
session_start();
if(isset($_SESSION["user_name"])){
	echo 'Chào mừng bạn đến với blog sonnguyenaz.com<br>';
	echo 'Chào bạn: '.$_SESSION['full_name'].'<br>';
	echo 'Email: '.$_SESSION['email'].'<br>';
	echo 'Số điện thoại: '.$_SESSION['phone_number'].'<br>';	
	echo '<button type="submit" name="btn_dangxuat">Đăng xuất</button>';
}
else{
 ?>
<h2>Đăng nhập</h2>
<form method="post">
<p>Tên đăng nhập:</p><p>
<input type="text" name="user_name">
</p>
<p>Mật khẩu:</p><p>
<input type="password" name="password">
</p>
<button type="submit" name="btn_dangnhap">Đăng nhập</button>
</form>
<?php
}
require 'connect.php';
if(isset($_POST['btn_dangnhap'])){
	//---sử dụng phương thức POST để lấy dữ liệu nhập vào
	$user_name= isset($_POST['user_name'])? ($_POST['user_name']) : '';
	$password= isset($_POST['password'])? md5($_POST['password']) : '';

	//Lấy dữ liệu bảng users để kiểm tra tên đăng nhập và mật khẩu có đúng không
	$sql = "SELECT * FROM users where user_name='$user_name' and password='$password'";   
	$stmt = $con->prepare($sql); 
	$stmt->execute();
	$result = $stmt->setFetchMode(PDO::FETCH_ASSOC); 
	$result = $stmt->fetch();
	//Nếu không đúng mảng array trả về rỗng
	if(empty($result)){
		echo 'Tên tài khoản hoặc mật khâu không đúng!';
	}
	//Còn lại đăng nhập thành công hiển thị thông tin
	else{
		$_SESSION["user_name"] = $result['user_name'];
		$_SESSION["password"] = $result['password'];
		$_SESSION["full_name"] = $result['full_name'];
		$_SESSION["email"] = $result['email'];
		$_SESSION["phone_number"] = $result['phone_number'];	
	}	
}
?>

Kết quả là bạn có load lại trang thì thông tin đăng nhập vẫn còn được lưu lại:

session-trong-php

Bây giờ ta sẽ tiếp tục viết sự kiện khi bấm nút “Đăng xuất” thì tất cả các session sẽ bị xóa và hiện form đăng nhập lên bạn chỉ cần đặt ở cuối code PHP:

if(isset($_POST['btn_dangxuat'])){
//Xóa giá trị trong session
session_unset();
// hủy mọi session
session_destroy();
}

Như đã nói ở trên Session có cái hay ở chỗ là khi bạn tắt trình duyệt thì ngay lập tức tất cả session được lưu sẽ bị xóa y như ta gọi session_destroy();

Những website cần bảo mật cao thì việc sử dụng session là hoàn toàn hợp lý.

Như đã giới thiệu ở trên thì sử dụng Cookie trong PHP để lưu lại thông tin lâu hơn có thể là vài chục ngày, cho dù bạn có thoát trình duyệt hay chăng nữa. Trừ khi bạn vào cài đặt và xóa Cookie trong trình duyệt đi.

Cookie bạn có lưu trữ thành json trong PHP cho được nhiều giá trị cũng được, ở đây mình sẽ sử dụng mảng để lưu lại thông tin đăng nhập trong 30 ngày.

Cú pháp sử dụng Cookie như sau: setcookie($ten_cookie, $gia_tri_cookie, thoi_gian_luu_cookie);

setcookie("sonnguyenaz", $user_infor, time() + (86400 * 30), "/");

Trước hết ta lấy các thông tin đăng nhập lưu thành json:

$user_infor=json_encode($result)
setcookie("sonnguyenaz", $user_infor, time() + (86400 * 30), "/");

Giải thích: sở dĩ biến $result chính là một mảng array rồi nến ta dùng lệnh json_encode($result) để chuyển từ array sang dạng json để lưu vào Cookie.

Rồi tương tự như Session ta kiểm tra khi load trang thì Cookie lưu thông tin đăng nhập có tồn tại hay không.

Để chuyển đổi json lại thành mảng array trong PHP thì ta sử dụng lệnh: json_decode($_COOKIE[‘sonnguyenaz’], true);

if(isset($_COOKIE['sonnguyenaz'])){
	$user_infor_array = json_decode($_COOKIE['sonnguyenaz'], true);
	echo 'Chào mừng bạn đến với blog sonnguyenaz.com<br>';
	echo 'Chào bạn: '.$user_infor_array['full_name'].'<br>';
	echo 'Email: '.$user_infor_array['email'].'<br>';
	echo 'Số điện thoại: '.$user_infor_array['phone_number'].'<br>';	
	echo '<button type="submit" name="btn_dangxuat">Đăng xuất</button>';
}

Giờ ta sẽ viết sự kiện xóa cookie khi bấm nút “Đăng xuất“:

if(isset($_POST['btn_dangxuat'])){
	//Ta đặt lại cookie về rỗng với thời gian trong quá khứ
	setcookie("sonnguyenaz", "", time() - 3600, "/");
}

Đoạn code đầy đủ như sau:

<?php
if(isset($_COOKIE['sonnguyenaz'])){
	$user_infor_array = json_decode($_COOKIE['sonnguyenaz'], true);
	echo 'Chào mừng bạn đến với blog sonnguyenaz.com<br>';
	echo 'Chào bạn: '.$user_infor_array['full_name'].'<br>';
	echo 'Email: '.$user_infor_array['email'].'<br>';
	echo 'Số điện thoại: '.$user_infor_array['phone_number'].'<br>';	
	echo '<button type="submit" name="btn_dangxuat">Đăng xuất</button>';
}
else{
 ?>
<h2>Đăng nhập</h2>
<form method="post">
<p>Tên đăng nhập:</p><p>
<input type="text" name="user_name">
</p>
<p>Mật khẩu:</p><p>
<input type="password" name="password">
</p>
<button type="submit" name="btn_dangnhap">Đăng nhập</button>
</form>
<?php
}
require 'connect.php';
if(isset($_POST['btn_dangnhap'])){
	//---sử dụng phương thức POST để lấy dữ liệu nhập vào
	$user_name= isset($_POST['user_name'])? ($_POST['user_name']) : '';
	$password= isset($_POST['password'])? md5($_POST['password']) : '';

	//Lấy dữ liệu bảng users để kiểm tra tên đăng nhập và mật khẩu có đúng không
	$sql = "SELECT * FROM users where user_name='$user_name' and password='$password'";   
	$stmt = $con->prepare($sql); 
	$stmt->execute();
	$result = $stmt->setFetchMode(PDO::FETCH_ASSOC); 
	$result = $stmt->fetch();
	//Nếu không đúng mảng array trả về rỗng
	if(empty($result)){
		echo 'Tên tài khoản hoặc mật khâu không đúng!';
	}
	//Còn lại đăng nhập thành công hiển thị thông tin
	else{
		$user_infor=json_encode($result);
		setcookie("sonnguyenaz", $user_infor, time() + (86400 * 30), "/");
	}	
}
if(isset($_POST['btn_dangxuat'])){
	//Ta đặt lại cookie về rỗng với thời gian trong quá khứ
	setcookie("sonnguyenaz", "", time() - 3600, "/");
}
?>

Kết quả là:

cookie-trong-php

Lời kết

Như vậy tiếp tục chuỗi bài hướng dẫn lập trình PHP mình đã giới thiệu các bạn thêm cách sử dụng Session và Cookie trong PHP.

Hi vọng sẽ giúp ích được cho các bạn.

Cảm ơn các bạn đã theo dõi.

Rate this post

sonnguyen

Là một nhân viên IT thích chia sẻ những gì mình biết đến tất cả mọi người. Hi vọng được mọi người ủng hộ, nếu có gì sai sót mong các bạn comment xuống dưới để mình khắc phục. Cảm ơn mọi người!

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *