Tìm hiểu Cookies và Session trong PHP
Cookie và session là hai phương pháp sử dụng để quản lý các phiên làm việc giữa người sử dụng và hệ thống. Việc quản lý phiên làm việc này sẽ giúp bạn tạo ra sự chứng thực hiệu quả …
Cookie và session là hai phương pháp sử dụng để quản lý các phiên làm việc giữa người sử dụng và hệ thống. Việc quản lý phiên làm việc này sẽ giúp bạn tạo ra sự chứng thực hiệu quả bởi việc xác nhận thông tin trước khi truy cập vào một phân vùng cố định. Ngoài ra, việc quản lý tốt phiên làm việc cũng giúp người truy cập cảm thấy dễ dàng sử dụng dịch vụ của trang web cho những lần truy cập sau. Bởi cớ chế quản lý phiên làm việc ghi nhận lại quá trình truy cập của người sử dụng khi họ thăm viếc trang web của bạn lần đầu.
1. Tổng quan về Cookie:
Nói một cách dễ hiểu, cookies dùng để lưu giá trị nào đó sẽ được truyền từ trình duyệt của người sử dụng lên máy chủ. Giá trị này sẽ được trình duyệt lưu lại theo thông số mà người dùng tạo ra cookies. Cookies có rất nhiều tác dụng (lưu trữ giá trị khi truyền dữ liệu từ site này sang site khác…) nhưng thường chúng ta hay thấy nó giúp website cho phép người dùng đăng nhập một lần, và những lần sau không phải thưc hiện nữa.
Để thực hiện khai báo một cookie, ta sẽ dùng hàm setcookie(). Cấu trúc cơ bản như sau:
1 2 3 | <?php setcookie(têncookie,Giátrị,Thờihạn); ?> |
Bây giờ các bạn hãy làm như sau để hiểu thật rõ về cookies và cách sử dụng. Tạo một file có tên “setcookie.php”, file này sẽ có nhiệm vụ thiết lập một cookie và thời hạn tồn tại của cookie đó. Tiếp theo tạo file “getcookie.php” có nhiệm vụ nhận lấy giá trị cookie.
setcookie.php.
1 2 3 4 | <?php setcookie("user","Admin",time()+10); echo"Cookie được thiết lập trong 10 giây"; ?> |
Còn đây là file getcookie.php.
1 2 3 4 5 6 7 8 | <?php if(isset($_COOKIE['user'])){ echo "Bạn vừa thiết lập cookie: ".$_COOKIE['user']; } else{ echo"Không có cookie nào"; } ?> |
Ở trên mình đã khai báo một cookie có tên là “user” và giá trị là “Admin”, thời gian sống của cookie là 10 giây. Các bạn hãy để ý tới “time() + 10″, có thể đơn giản hiểu là 10 giây tính từ lúc ta chạy file.
Các bạn chạy file setcookie trước, rồi nhanh chóng trong thời gian thiết lập thời hạn của cookie, chạy tiếp file getcookie, ta sẽ thấy được giá trị của cookie đó.Hàm time() là hàm dùng để lấy ra thời gian hiện tại dưới dạng tổng số giây tính từ ngày 1/1/1970 (Thông tin thêm là như thế, nhưng cá nhân tôi nghĩ các bạn đừng để ý làm gì cho mệt, hãy cứ nghĩ rằng nếu dùng “time() + số giây” trong trường hợp trên sẽ cho ta thời gian sống của cookie chính bằng số giây ta thêm )
Ở file “getcookie.php” chúng ta làm quen với một hàm mới, đó là hàm “isset()”. Hàm này cho ta kiểm tra một biến hoặc một phương thức, giá trị nào đó đã tồn tại hay chưa?
Để nhận giá trị cookie ta vừa khai báo, các bạn sử dụng như sau:
1 | $_COOKIE['tencookie'] |
Bây giờ hãy chạy file “setcookie.php” trước, sau đó bạn chạy file “getcookie.php”. Nếu bạn chạy file getcookie trong khoảng thời hạn thiết lập thì bạn sẽ nhận được giá trị của cookie ngay cả khi bạn tắt trình duyệt đi và mở lại file getcookie. Và để xóa cookie ta sử dụng câu lệnh sau:
1 | setcookie("user","",time()-3600); |
Ứng dụng kiến thức trên, chúng ta hãy đi làm một ví dụ về login form sử dụng cookie. Cơ bản ta cần 3 file: File “dangnhap.php” hiển thị form đăng nhập, “xylydangnhap.php” xử lý đăng nhập.
Mở file xulydangnhap.php, gõ thêm ở đầu:
1 2 3 4 5 6 7 8 9 10 11 12 | <?php if(isset($_POST['nho'])==true) { setcookie("username",$_POST['u'], time()+60*60*24*7); setcookie("password",$_POST['p'], time()+60*60*24*7); } else { setcookie("username",$_POST['u'],time()-1); setcookie("password",$_POST['p'],time()-1); } ?> |
Lưu file lại
Mở file 1 file dangnhap.php , chọn tag form rồi kểm tra xem có phải method là POST không
Nhắp textfield tên u rồi qua code, bạn sẽ thấy đoạn mã:
1 | <input name="u"type="text"class="txtfield"id="u"/> |
Gõ thêm vào (màu đỏ) để có kết quả sau:
1 | <input value="<?echo$_COOKIE['username'];?>"name="u"type="text"class="txtfield"id="u"/> |
Chạy trang dangnhap.php. Gõ username và password , check vào Nhớ username rồi nhắp Đăng nhập, bạn sẽ thấy user name password. Lúc này username và password đã được lưu lại trong cookie. Xem xong đóng browser lại
Chạytrang dangnhap.php. Bạn sẽ thấy username, password đã được hiện sẵn.
2. Tổng quan về Session:
Session cũng gần giống với cookie, nó dùng để lưu lại giá trị mà bạn cần, tuy nhiên, dù bạn không dùng lệnh xóa session, dữ liệu này cũng chỉ được lưu cho đến khi bạn tắt trình duyệt. Session được dùng rất nhiều trong php, tùy vào trường hợp mà chúng ta có những cách sử dụng session khác nhau.
Ở phần trước, chúng ta đã làm một ví dụ nhỏ về login với cookie. Để đầy đủ chúng ta sẽ thêm vào sự kết hợp với session, vì có nhiều người sử dụng chỉ muốn đăng nhập website để xem thông tin web trong lúc đó (ví dụ như máy tính có nhiều người sử dụng, họ sẽ không muốn lưu thông tin đăng nhập vì người sau dùng sẽ có thể biết được thông tin cá nhân…)
Nhưng trước hết, tôi sẽ giới thiệu cách sử dụng session. Trong file, để session làm việc bạn phải khởi động session với lệnh: “session_start()”. Lưu ý đây là bắt buộc, phải có lệnh này session mới hoạt động. Đặc biệt, bạn phải đặt lệnh này ở trên cùng tất cả các dòng lệnh khác để tránh xảy ra những lỗi khó chịu.
1 2 3 | <?php session_start(); ?> |
Khai báo session như sau:
1 | $_SESSION['session_name']=any value; |
Để xóa session:
1 2 3 | unset($_SESSION['session_name']);// Xóa session có tên là session_name //Hoặc session_destroy();//Xóa toàn bộ các session |
Bây giờ chúng ta sẽ hoàn thiện form login từ bài trước với sự kết hợp của session. Các bạn hãy mở các file của bài trước ra. Ở file “xulydangnhap.php”: Thêm “session_start();” vào trên cùng, sau khi đăng nhập thành công ta thêm lệnh đăng kí một session.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | <?php session_start();//!!! $username="mrdeeds";//Coi như lấy dữ liệu từ database. $password="vnstyling"; if($_POST['username']=="$username"&&$_POST['password']=="$password")// nếu trùng khớp tài khoản. { if($_POST['remember']=='on')// nếu checkbox được chọn { setcookie("username",$username,time()+3600); $_SESSION['username']=$username;//!!! echo"Xin chào ".$username." Bạn đã đăng nhập thành công! <a href='login.php'>Back</a> "; } else// nếu checkbox ko được chọns { $_SESSION['username']=$username; echo"Xin chào ".$username." Bạn đã đăng nhập thành công! <a href='login.php'>Back</a>"; } } elseif($_POST['username']==""||$_POST['password']=="")// nếu text rỗng { echo"Bạn hãy điền đầy đủ thông tin! <a href='login.php'>Back</a>"; } else//Nếu sai tài khoản { echo"Có lỗi hãy kiểm tra lại thông tin! <a href='login.php'>Back</a>"; } ?> |
Ở file “dangnhap.php” chúng ta sẽ phải thay đổi một chút ở điều kiện kiểm tra session và cookie.
Không click vào nút “remember me” khi đăng nhập: chỉ có thông tin session, ta quy ước trường hợp này biến $check = 1;
Click vào nút “remeber me”: ta có cả thông tin về session và cookie, ta quy ước trường hợp này $check = 2;
Trường hợp chưa từng đăng nhập hoặc đăng nhập từ lần trước (không chọn remember) nhưng đã tắt trình duyệt: Không có thông tin của session lẫn cookie, $check = 0;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 | <?php session_start();//!!! if(!isset($_COOKIE['username']))//nếu không tồn tại cookie username { if(isset($_SESSION['username']))//nếu không tồn tại cookie username nhưng vẫn tồn tại session { $check=1;//khai báo một biến điều kiện bất kì có giá trị là đúng (ta tự quy ước 1 là đúng) } else// nếu không tồn tại cả cookie và session { $check=0;//khai báo một biến điều kiện bất kì có giá trị là sai } } else//nếu tồn tại cookie (đương nhiên là sẽ tồn tại session, xem code login_action.php) { $check=2; } if($check==1) { echo"Xin chào ".$_SESSION['username']."! Bạn đã đăng nhập rồi | <a href='logout.php'>Log out</a>"; } elseif($check==2) { echo"Xin chào ".$_COOKIE['username']."! Bạn đã đăng nhập rồi | <a href='logout.php'>Log out</a>"; } else//chưa đăng nhập bao giờ hoặc đã tắt trình duyệt sau lần đăng nhập trước không click checkbox { ?> <!DOCTYPE html PUBLIC"-//W3C//DTD XHTML 1.0 Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>Đăng nhập</title> </head> <body> <form action="login_action.php"method="post"> Username:<input type="text"name="username"/><br/> Password:<input type="password"name="password"/><br/> <input type="checkbox"name="remember"/>Remember me?<br/> <input type="submit"value="Đăng nhập"/> </form> </body> </html> <?php }// end else ?> |
Và cuối cùng tại file “dangxuat.php”: thêm “session_start();” và thêm lệnh hủy session.
1 2 3 4 5 6 7 | <?php session_start(); setcookie("username","",time()-3600);//delete cookie session_destroy();//delete session echo"Logout thành công! <a href='login.php'>Back</a>"; ?> <meta http-equiv="Content-Type"content="text/html; charset=utf-8"/> |
Sẽ có những cách lọc điều kiện khác nhau về kiểm tra session và cookie trong đăng nhập, trên đây là cách của tôi. Hi vọng các bạn sẽ tự tìm ra cho mình cách riêng. Tiếp theo ta sẽ làm một ví dụ nhỏ nữa về session. Đếm lượng page views (Tất nhiên đây chỉ là ví dụ giúp ta hiểu về session và cách lưu giá trị của nó mà thôi vì đếm page views trong thực tế chúng ta sẽ sử dụng các cách khác. Tôi sẽ giới thiệu với các bạn sau khi tiếp thu được những kiến thức mới) File “views.php”:
1 2 3 4 5 6 7 8 9 10 11 12 | <?php session_start(); if(isset($_SESSION['views']))// nếu đã có session { $_SESSION['views']=$_SESSION['views']+1;// tăng giá trị session lên 1 mỗi lần truy cập vào trang } else { $_SESSION['views']=1;// nếu chưa có session, khai báo một session "views" có giá trị là 1. } echo$_SESSION['views']." Views"; ?> |
Với cách trên, mỗi lần tắt trình duyệt, giá trị session sẽ bị đưa về 1 nếu lần sau ta vào lại.
Tóm lại: Vậy là đã tìm hiểu sơ lược về cookie và sesion cơ bản về thì hai loại biến này hoàn toàn giống nhau chỉ là cookie thì là biến ở clien hoạt động ở trình duyệt, session thì ở server. Biến này dùng để quản lý các phiên làm việc của một mảng nào đó chẳng hạn của 1 user. Khi bạn khai báo biến session hay cookie trong thời gian sống của nó thì ở bất kỳ trang nào trong site bạn cũng đều sử dụng được biến này. Hy vọng bài viết này sẽ phần nào giúp các bạn hiểu rõ hơn về Cookies và Session trong PHP. Chúc các bạn thành công !
Category: Lập trình PHP, php căn bản
0 comments