Nội dung bài viết
Đăng ký học lập trình C++
Tại STDIO bạn được dạy nền tảng lập trình tốt nhất.
Đăng ký học
Chắc hẳn những ai đã từng học lập trình web đều biết đến khái niệm POST và GET để truyền và nhận dữ liệu. Như phương thức POST bảo mật hơn GET. Vậy vì sao lại có bảo mật hơn, có sự khác nhau nào giữa hai phương thức truyền và nhận dữ liệu này hay không ?. Trong bài viết này tôi sẽ trình bày và phân tích rõ ràng để các bạn hiểu rõ hơn về hai khái niêm POST và GET.

Giới thiệu

Chắc hẳn những ai đã từng học lập trình web đều biết đến khái niệm POSTGET để truyền và nhận dữ liệu. Như phương thức POST bảo mật hơn GET. Vậy vì sao lại có bảo mật hơn, có sự khác nhau nào giữa hai phương thức truyền và nhận dữ liệu này hay không ?. Trong bài viết này tôi sẽ trình bày và phân tích rõ ràng để các bạn hiểu rõ hơn về hai khái niêm POST và GET.

Tiền đề bài viết

Trong những ngày bắt đầu lập trình web với ngôn ngữ PHP, tôi gặp khó khăn khi tiếp xúc với phương thức truyền dữ liệu POST và GET.  Sau quá trình tìm hiểu tôi muốn chia sẽ tới các bạn đọc nhằm cũng cố kiến thức cũng như giúp các bạn đang gặp khó khăn trong vấn đề này.

Đối tượng hướng đến

Những lập trình viên mới bắt đầu lập trình web với ngôn ngữ PHP và mong muốn hiểu rõ cơ chế truyền dữ liệu với phương thức POST và GET.

Giới thiệu về form trong html

Form là gì?.  Đơn giản form là một thẻ trong html dùng để nhận dữ liệu từ người dùng, giúp gửi yêu cầu của người dùng đến trang xử lý trong trang web. 
Ví dụ dưới đây là form đăng ký của stdio.vn :: www.stdio.vn/ 

ss_from

Thẻ form trong hlmt là một container chứa các thành phần nhập liệu. Thì các thành phần trong form chúng ta gọi là Form Field như Text Field, Password Field, Check Box, Button...

Cú pháp: 

<form name="..." action="..." method="...">
    Các thành phần của form
</form>

Các thuộc tính của form:

  • name : Tên của form.
  • action : Chỉ định trang web sẽ nhận dữ liệu từ khi form có sự kiện click button submit.
  • method : Xác định phương thức truyền dữ liệu (POST, GET).

Tìm hiểu POST và GET trong PHP

POST, GET là phương thức cho phép người sử dụng truyền dữ liệu trong form từ trang này qua trang khác và khối lượng dữ liệu truyền đi của form bị giới hạn bởi chiều dài tối đa của một URL (chiều dài tối đa của một URL là 2048bytes).
Để truyền được dữ liệu trong form từ trang này sang trang kia sẽ có những yêu cầu sau:

  • Dữ liệu cần truyền phải nằm trong cặp thẻ <form> </form>.
  • Dữ liệu cần truyền phải nhập vào các form field.
  • Dữ liệu chỉ được truyền đi khi nhấn button submit.

Để demo trong quá trình trình bày tôi tạo 2 file .php là a.php và b.php trong thư mục C:\xampp\htdocs\DemoPostGet.

ss_folder
Trong đó file a.php sẽ có một form chứa các trường dữ liệu là username và password do người dùng nhập vào.
File b.php tôi sẽ lấy các thông tin từ form bên trang a.php truyền sang và hiển thị lên trình duyệt khi nhất button submit.
Để nhận dữ liệu từ form truyền qua ta sử dụng biến toàn cục trong PHP.

  • Nếu dùng phương thức POST: $_POST[‘field_name’].
  • Nếu dùng phương thức GET: $_GET[‘field_name’].
  • Nếu không xác định được phương thức truyền: $_REQUEST[‘field_name’].

Giống nhau

Đều là cơ chế truyền dữ liệu trong form từ trang này sang khác.

Khác nhau

Phương thức POST

Các dữ liệu của form được truyền ngầm và dữ liệu truyền đi không phụ thuộc vào URL.

-    Ưu điểm 

  •  Bảo mật hơn phương thức GET.
  •  Không giới hạn dung lượng dữ liệu truyền đi 

-    Nhược điểm

  •  Dữ liệu truyền đi không tường mình (cơ chế truyền ngầm định) do đó sẽ phát sinh lỗi tiềm ẩn.

Demo
File a.php sử dụng phương thức POST:

<html>
	<head></head>
	<title>Demo Post and Get</title>
	<body>
		<form name="frmLogin" action="b.php" method="post">
			<label>User Name: </label>
			<input type="text" name="txtUserName"/><br/>
			<label>Password: </label>
			<input type="password" name="txtPassword" /><br/>
			<input type="submit" value="Log in"/> <br/>
		</form>
	</body>
</html>

Kết quả khi chạy trên trình duyệt file a.php

ss_input_empty
File b.php sử dụng biến toàn cục $_POST để lấy dữ liệu từ form truyền sang.

<html>
	<head>
	</head>
	<body>
		<?php
			$username = $_POST['txtUserName'];
			$password = $_POST['txtPassword'];
			echo "<p>UserName : ".$username."</p>";
			echo "<p>Password : ".$password."</p>";
		?>
	</body>
</html>

Nhập User Name và Password.


 Và nhấn submit ta sẽ thấy dữ liệu được truyền ngầm định mà không hiện lên ở URL.

ss_result_post

Phương thức GET

Các dữ liệu đường truyền đi được hiển thị lên URL của trình duyệt và dữ liệu truyền đi phụ thuộc vào độ dài đối đa của URL.

Ưu điểm

  • Người dùng có thể bookmark lại địa chỉ URL
  • Người dùng có thể giả lập lại phương thức GET để truyền dữ liệu mà không cần thông qua form (sử dụng query string).

Nhược điểm

  • Không thích hợp truyền dữ liệu có tính bảo mật như password.
  • Dung lượng dữ liệu truyền đi có giới hạn (phụ thuộc vào độ dài tối đa của URL).

Demo

File a sử dụng phương thức GET

<html>
	<head></head>
	<title>Demo Post and Get</title>
	<body>
		<form name="frmLogin" action="b.php" method="get">
			<label>User Name: </label>
			<input type="text" name="txtUserName"/><br/>
			<label>Password: </label>
			<input type="password" name="txtPassword" /><br/>
			<input type="submit" value="Log in"/> <br/>
		</form>
	</body>
</html>

File b.php sử dụng biến toàn cục $_GET để lấy dữ liệu từ form truyền sang.

<html>
	<head>
	</head>
	<body>
		<?php
			$username = $_GET['txtUserName'];
			$password = $_GET['txtPassword'];
			echo "<p>UserName : ".$username."</p>";
			echo "<p>Password : ".$password."</p>";
		?>
	</body>
</html>

Chạy file a.php sau đó nhập nội dung như trường hợp sử dụng phương thức POST ta sẽ thấy kết quả là các dữ liệu được truyền đi được hiển thị lên URL của trình duyệt. Lưu ý là dữ liệu truyền đi là có giới hạn phụ thuộc vào độ dài của URL (tối đa 2048 bytes).

ss_result_get

Tới đây bạn đã hiểu tại sao phương thức POST lại an toàn hơn GET vì những thông tin bảo mật như thông tin mật khẩu như ở trên chúng ta không thể sử dụng phương thức GET để truyền dữ liệu được.

Lời kết

Như vậy là qua bài viết tôi đã giúp các bạn làm rõ sự khác nhau giữa hai phương thức truyền dữ liệu POST và GET. Hy vọng qua bài viết này các bạn có thể tháo gỡ những khó khăn, thắc mắc khi tiếp xúc với kiến thức này. 

Download Source Code

Download source code tại đây: Stdio.vn_DemoPostGet.zip

 

THẢO LUẬN