Tác giả: Dương Nguyễn Phú Cường Show
Ngày đăng: Hồi xưa đó WorkFlow CookieCookie là tập tin được lưu ở máy người dùng (cụ thể là tại Web Browser). Được gởi kèm theo Request đến Web Server.Cookie được sử dụng với mục đích sau:
Thiết lập Cookie Từ PHP có thể thiết lập Cookie bằng hàm setcookie(name, value, expire, path, domain, security, httponly);
<?php setcookie("name", "NENTANG", time()+3600, "/","", 0); ?> Truy cập Cookie Bạn dùng biến <?php if( isset($_COOKIE["name"])) echo "Welcome " . $_COOKIE["name"] . "<br />"; else echo "Không có tên" . "<br />"; ?> Xóa CookieĐể yêu cầu trình duyệt xóa cookie bạn sử dụng chính hàm setcookie với thủ thuật đặt thời gian đã hết hạn (set thời gian về quá khứ). Ví dụ, lấy thời gian hiện tại trừ đi 60s: setcookie( "name", "", time()- 60, "/","", 0); Thực hành Tạo chức năng Ghi nhớ Đăng nhậpWorkFlow xử lý chức năng Ghi nhớ Đăng nhậpMong muốn
Step 1: tạo form Đăng nhập
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Cookie trong PHP | Nền tảng VN</title> </head> <body> <h2>Cookie trong PHP</h2> <!-- Form Login --> <form name="frmLogin" method="post" action=""> Tài khoản: <input type="text" name="username" id="username" /><br /> Mật khẩu: <input type="text" name="password" id="password" /><br /> Ghi nhớ đăng nhập: <input type="checkbox" name="remember_me" id="remember_me" value="1" /><br /> <input type="submit" name="btnLogin" value="Đăng nhập" /> </form> <?php // Xử lý nếu người dùng có bấm nút "btnLogin" if(isset($_POST['btnLogin'])) { // Lấy thông tin người dùng gởi đến Server $username = $_POST['username']; $password = $_POST['password']; // Đối với checkbox cần kiểm tra xem giá trị có tồn tại hay không? // Nếu có thì lấy giá trị do người dùng checked; nếu không thì phải gán giá trị mặc định $remember_me = isset($_POST['remember_me']) ? 1 : 0; // Xử lý các logic/Nghiệp vụ ... // Nếu username=admin và password=123456 thì đăng nhập thành công if($username == 'admin' && $password == '123456') { // Hiển thị thông tin chào mừng echo "<h2>Xin chào $username!</h2>"; } else { echo "Đăng nhập thất bại!"; } } ?> </body> </html> Step 2: lưu trữ giá trị đã đăng nhập trong Cookie và Yêu cầu Web Browser của người dùng lưu trữ giá trị này
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Cookie trong PHP | Nền tảng VN</title> </head> <body> <h2>Cookie trong PHP</h2> <!-- Form Login --> <form name="frmLogin" method="post" action=""> Tài khoản: <input type="text" name="username" id="username" /><br /> Mật khẩu: <input type="text" name="password" id="password" /><br /> Ghi nhớ đăng nhập: <input type="checkbox" name="remember_me" id="remember_me" value="1" /><br /> <input type="submit" name="btnLogin" value="Đăng nhập" /> </form> <?php // Xử lý nếu người dùng có bấm nút "btnLogin" if(isset($_POST['btnLogin'])) { // Lấy thông tin người dùng gởi đến Server $username = $_POST['username']; $password = $_POST['password']; // Đối với checkbox cần kiểm tra xem giá trị có tồn tại hay không? // Nếu có thì lấy giá trị do người dùng checked; nếu không thì phải gán giá trị mặc định $remember_me = isset($_POST['remember_me']) ? 1 : 0; // Xử lý các logic/Nghiệp vụ ... // Nếu username=admin và password=123456 thì đăng nhập thành công if($username == 'admin' && $password == '123456') { // Nếu người dùng có chọn "Ghi nhớ Đăng nhập" // => tiến hành lưu thông tin vào COOKIE và gởi lại người dùng if($remember_me == 1) { // Thiết lập Cookie "Ghi nhớ đăng nhập" trong 15' ~ 3600s setcookie('is_logged', true, time()+ 3600, '/'); // Thiết lập Cookie "Tên username đã đăng nhập" trong 15' ~ 3600s setcookie("username_logged", $username, time()+3600, "/","", 0); } // Hiển thị thông tin chào mừng echo "<h2>Xin chào $username!</h2>"; } else { echo "Đăng nhập thất bại!"; } } ?> </body> </html> Step 3: bổ sung phần kiểm tra giá trị trong Cookie
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Cookie trong PHP | Nền tảng VN</title> </head> <body> <h2>Cookie trong PHP</h2> <?php // Kiểm tra xem Người dùng có sử dụng Ghi nhớ Đăng nhập không? if(isset($_COOKIE['is_logged'])) { // Lấy thông tin từ COOKIE từ Web Browser của client gởi đến $username_logged = isset($_COOKIE['username_logged']) ? $_COOKIE['username_logged'] : ''; echo "Xin chào <b>$username_logged</b>! Bạn đã đăng nhập rồi."; echo "Bạn sẽ được chuyển đến trang chủ trong 5s;"; echo '<script>setTimeout(function(){ window.location="/" }, 5000);</script>'; die; } ?> <!-- Form Login --> <form name="frmLogin" method="post" action=""> Tài khoản: <input type="text" name="username" id="username" /><br /> Mật khẩu: <input type="text" name="password" id="password" /><br /> Ghi nhớ đăng nhập: <input type="checkbox" name="remember_me" id="remember_me" value="1" /><br /> <input type="submit" name="btnLogin" value="Đăng nhập" /> </form> <?php // Xử lý nếu người dùng có bấm nút "btnLogin" if(isset($_POST['btnLogin'])) { // Lấy thông tin người dùng gởi đến Server $username = $_POST['username']; $password = $_POST['password']; // Đối với checkbox cần kiểm tra xem giá trị có tồn tại hay không? // Nếu có thì lấy giá trị do người dùng checked; nếu không thì phải gán giá trị mặc định $remember_me = isset($_POST['remember_me']) ? 1 : 0; // Xử lý các logic/Nghiệp vụ ... // Nếu username=admin và password=123456 thì đăng nhập thành công if($username == 'admin' && $password == '123456') { // Nếu người dùng có chọn "Ghi nhớ Đăng nhập" // => tiến hành lưu thông tin vào COOKIE và gởi lại người dùng if($remember_me == 1) { // Thiết lập Cookie "Ghi nhớ đăng nhập" trong 15' ~ 3600s setcookie('is_logged', true, time()+ 3600, '/'); // Thiết lập Cookie "Tên username đã đăng nhập" trong 15' ~ 3600s setcookie("username_logged", $username, time()+3600, "/","", 0); } // Hiển thị thông tin chào mừng echo "<h2>Xin chào $username!</h2>"; } else { echo "Đăng nhập thất bại!"; } } ?> </body> </html> Thực hành Tạo chức năng Cấu hình Giao diệnWorkFlow xử lý chức năng Cấu hình Giao diện
Step 1: tạo file ví dụ Cấu hình giao diện
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Cookie trong PHP | Nền tảng VN</title> <style> .theme-light { background: #fff; color: #000; } .theme-dark { background: #000; color: yellow; } </style> <?php // Mặc định giao diện là Theme nền sáng $theme_class = 'theme-light'; // Kiểm tra xem Người dùng có cấu hình giao diện theo ý thích không? if (isset($_COOKIE['theme_class'])) { // Lấy thông tin từ COOKIE từ Web Browser của client gởi đến $theme_class = isset($_COOKIE['theme_class']) ? $_COOKIE['theme_class'] : 'theme-light'; } ?> </head> <body class="<?= $theme_class ?>"> <h2>Cấu hình Giao diện sử dụng Cookie trong PHP</h2> <!-- Form Login --> <form name="frmLogin" method="post" action=""> <label><input type="radio" name="theme" id="theme-1" value="theme-light" checked />Giao diện nền Sáng</label><br /> <label><input type="radio" name="theme" id="theme-2" value="theme-dark" />Giao diện nền Tối</label><br /> <input type="submit" name="btnSave" value="Lưu" /> </form> <?php // Xử lý nếu người dùng có bấm nút "btnSave" if (isset($_POST['btnSave'])) { // Lấy thông tin người dùng gởi đến Server $theme = $_POST['theme']; // Xử lý các logic/Nghiệp vụ ... // Thiết lập Cookie "theme_class" trong 15' ~ 3600s setcookie('theme_class', $theme, time() + 3600, '/'); // Hiển thị thông tin chào mừng echo "<h2>Cấu hình đã được lưu!</h2>"; } ?> </body> </html> Xem thêm về bảo mật liên quan đến Cookie/SessionMany of these configuration arguments are important for preventing attacks such as Cross-Site Scripting (XSS), Cross-Site Request Forgery (CSRF), Cookie Theft and Manipulation, Session Hijacking, and Session Fixation. |