Quý vị vui lịng giành ít thời gian xem bản giới thiệu này.

Một phần của tài liệu Giáo trình Phát triển ứng dụng web: Phần 2 - Lê Đình Thanh, Nguyễn Việt Anh (Trang 79 - 82)

22. <br><br>

WebAppDevLê Đình Thanh, Nguyễn Việt Anh 164 164 24. </div> 25. <script> 26. document.getElementById("closeguide").onclick = function() { 27. document.getElementById("guide").style.display = "none"; 28. }; 29. </script> 30. <?php 31. setcookie("guideshown", "shown"); 32. } 33. ?> 34.</body></html> 8.1.2.Phiên

Phiên (session) là cuộc thoại (dialogue/conversation) giữa trình kh{ch v| trình phục vụ. Phiên bắt đầu khi trình kh{ch kết nối đến trình phục vụ v| kết thúc khi một trong hai bên đóng kết nối hoặc thời gian gi|nh cho phiên đã hết (timeout). HTTP 1.1 với kết nối bền vững cho phép trình kh{ch gửi nhiều yêu cầu v| nhận nhiều đ{p ứng HTTP trong cùng một phiên. Với phiên, thông tin hay dữ liệu trạng th{i được lưu giữ bên phục vụ. Nếu quan niệm trình phục vụ l| phịng kh{m v| trình kh{ch l| bệnh nh}n đến phịng kh{m để kh{m bệnh thì phiên cũng giống nhƣ sổ kh{m bệnh nhƣng l| sổ kh{m của b{c sỹ, đƣợc phịng kh{m lƣu giữ m| khơng trao cho bệnh nh}n. B{c sỹ của phịng kh{m sẽ ghi tất cả thơng tin về bệnh lý, đơn thuốc điều trị cho bệnh nh}n v|o sổ kh{m bệnh v| cất giữ sổ kh{m bệnh tại phòng kh{m. Dĩ nhiên, với rất nhiều bệnh nh}n, phịng khám sẽ khơng nhớ bệnh nh}n l| ai nếu không đƣa cho bệnh nh}n thứ gì đem về v| mang theo tại c{c lần kh{m sau. Tối thiểu, phòng kh{m phải cấp cho mỗi bệnh nh}n một thẻ khám ghi số hiệu bệnh nh}n. Bệnh nh}n cầm thẻ kh{m về v| mang nó theo tại c{c lần đến kh{m tiếp theo. Căn cứ số hiệu ghi trên thẻ kh{m, b{c sỹ sẽ tra cứu thông tin về bệnh nh}n đã ghi trong sổ kh{m theo số hiệu đƣợc cung cấp. Quay về ứng dụng web, phiên giống nhƣ sổ kh{m đƣợc cất giữ tại phòng khám. Mỗi phiên có một định danh duy nhất. Định danh phiên đóng vai trị nhƣ thẻ kh{m. Nói cách kh{c, định danh phiên giống nhƣ số hiệu, l| thông tin tối thiểu m| trình phục vụ gửi cho trình kh{ch rồi trình kh{ch gửi lại cho trình phục vụ trong c{c yêu cầu tiếp

theo. Căn cứ v|o định danh phiên, trình phục vụ tra cứu dữ liệu phiên đã lƣu bên

phục vụ để biết trạng th{i l|m việc với trình kh{ch.

Định danh phiên đƣợc bên phục vụ tự động tạo ra theo một thuật toán sinh số ngẫu nhiên nhằm đảo bảo mỗi phiên có một định danh duy nhất v| kẻ xấu không thể l|m giả định danh phiên nhằm chiếm đoạt phiên. Trao đổi định danh phiên thƣờng đƣợc thực hiện bằng c{ch sử dụng cookie, tức định danh phiên l| gi{ trị của một cookie đƣợc gửi đi v| gửi lại giữa trình kh{ch v| trình phục vụ. Đơi khi, trao đổi định danh phiên cũng có thể đƣợc thực hiện thơng qua URL.

Từ góc độ của ngƣời lập trình, định danh phiên đã đƣợc hệ thống tự động quản lý nên khơng cần quan t}m đến nó nữa. Lập trình viên chỉ cần khai b{o v| sử dụng c{c biến phiên để lƣu giữ trạng th{i l|m việc giữa trình kh{ch v| trình phục

WebAppDevLê Đình Thanh, Nguyễn Việt Anh

165

vụ. PHP cung cấp bộ sƣu tập/mảng $_SESSION để lập trình viên thực hiện điều

này. Để khai b{o v| g{n gi{ trị cho biến phiên, sử dụng cú ph{p

$_SESSION[‚tên_biến_phiên‛] = <giá_trị>. Để lấy gi{ trị biến phiên sử dụng cú

pháp $gia_tri = $_SESSION*‚tên_biến_phiên‛];. Có thể xo{ bỏ biến phiến thơng qua hàm unset($_SESSION*‚tên_biến_phiên‛]);.

Lƣu ý, trƣớc khi sử dụng c{c biến phiên cần khởi động phiên bằng h|m

session_start(). Hàm session_start() phải đƣợc gọi trƣớc khi gửi bất cứ nội dung gì

cho trình khách (trƣớc c{c thẻ HTML, trƣớc c{c lệnh echo(), print()). Sau khi khởi tạo phiên, biến mảng có phạm vi to|n cục $_SESSION đƣợc khởi tạo. Kể từ thời điểm n|y, ngƣời lập trình có thể thao t{c với dữ liệu phiên. Ngo|i ra, có thể hủy

phiên, xo{ to|n bộ c{c biến phiên thông qua h|m session_destroy().

Một lựa chọn đƣợc đƣa ra l| nên sử dụng phiên hay cookie để lƣu thông tin trạng th{i. Lựa chọn n|y tùy thuộc v|o ngƣời lập trình. Tuy nhiên, phiên thƣờng đƣợc ƣa chuộng hơn cookie vì một số lý do liên quan truyền thông v| an ninh. Thứ nhất, to|n bộ thông tin cookie đƣợc gửi đi trong mỗi yêu cầu HTTP l|m cho kích thƣớc c{c yêu cầu HTTP tăng lên. Nếu kích thƣớc dữ liệu trạng th{i lớn, hiệu năng truyền thông sẽ bị ảnh hƣởng. Thứ hai, quan trọng hơn, sử dụng phiên an to|n hơn vì thơng tin trạng th{i đƣợc lƣu trữ bên phục vụ, không phải bên trình kh{ch. Nếu sử dụng cookie, tính riêng tƣ bị vi phạm do trình khách nhớ cookie. Cuối cùng, đôi khi ngƣời sử dụng không chấp nhận cookie, khơng cho phép c{c

trình duyệt sử dụng cookie, do vậy cookie sẽ khơng hoạt động đƣợc.

Chƣơng trình sau đ}y l| viết lại của chƣơng trình ví dụ trong Mục 8.1.1 với việc sử dụng phiên thay cho cookie. Chƣơng trình sử dụng một biến phiên có tên

guideshown để biết ngƣời dùng (trình kh{ch) đã ghé thăm trƣớc đó hay chƣa.

Nếu ngƣời dùng ghé thăm lần đầu trong phiên, chƣơng trình sẽ hiển thị một

thông tin ch|o mừng v| giới thiệu về trang web, đồng thời thiết lập biến phiên

guideshown. 1. <?php 2. session_start(); 3. ?> 4. <!DOCTYPE html><html><head> 5. <title>L.8.1.2</title> 6. <meta charset="utf-8"/> 7. <style> 8. #guide { 9. position:fixed; 10. top:200px; 11. left:200px; 12. width:500px; 13. height:110px; 14. background-color:grey; 15. } 16. </style> 17.</head><body>

18. <div>Nội dung của trang</div>

WebAppDevLê Đình Thanh, Nguyễn Việt Anh

166 20. if (!isset($_SESSION["guideshown"])) {// Truy cập lần đầu trong phiên 21. ?>

22. <div id="guide">

Một phần của tài liệu Giáo trình Phát triển ứng dụng web: Phần 2 - Lê Đình Thanh, Nguyễn Việt Anh (Trang 79 - 82)

Tải bản đầy đủ (PDF)

(126 trang)