Cookie là mẩu tin nhỏ được lưu ở máy người dùng (cụ thể là tại Browser, trình duyệt), Cookie sử dụng với mục đích để theo dõi, lưu lại hoạt động truy cập. Ví dụ nhớ tên người dùng truy cập vào website có thể hoạt động qua các bước như sau: Show
Nên nhớ Cookie được lưu lại ở Browser, sau đó mỗi lần gửi yêu cầu đến Server nó sẽ tự động gửi thông tin này đến Server Thiết lập, lưu CookieTừ PHP có thể thiết lập Cookie bằng hàm setcookie (nhớ phải gọi trước các dòng code xuất html). setcookie($name, $value, $expire = 0, $path="", $domain = "", $security = false, $httponly = false);
Ví dụ: setcookie.php <?php setcookie("name", "XUANTHULAB", time() + 600, "/"); echo "Set cookie"; ?>Đoạn mã trên thiết lập lưu Cookie với tên name, giá trị là XUANNTHULAB, hết hạn sau 10 phút (tức 600 giây) Bạn có thể chạy lệnh php -S 0.0.0.0:8080 setcookie.phpSau đó truy cập địa chỉ http://localhost:8080 để kiểm tra, ví dụ dùng Chrome Khi truy cập, phần header trả về có thông tin về thiết lập Cookie, ngược lại nếu đã có Cookie khi trình duyệt gửi yêu cầu - nó thiết lập giá trị cookie vào phần header của request Hoặc dùng lệnh curl để xem header trả về: Truy cập - đọc - CookieBạn dùng biến $_COOKIE là một mảng để truy cập thông tin cookie do trình duyệt gửi lên. Giống như Session bạn nên dùng isset() để kiểm tra sự tồn tại của COOKIE. readcookie.php <?php if( isset($_COOKIE["name"])) { echo "Welcome " . $_COOKIE["name"]; } else { echo "Không có tên"; } ?>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. Ví dụ: setcookie( "name", "", time()- 60, "/","", 0);Khái niệm về SessionĐể trao đổi dữ liệu từ trang này qua trang khác (giữa 2 request) thì làm như thế nào? Ví dụ nếu người dùng đã đăng nhập, thì thông tin đăng nhập được lưu lại và chuyển cho các trang khác nhau trong phiên làm việc để tránh mỗi lần gửi request lại phải đăng nhập, hay người dùng chọn đựa mặt hàng vào giỏ hàng thì phải nhớ để chuyển đến trang thanh toán ... PHP có cơ chế để làm việc này đó chính là SESSION Session là thông tin về phiên làm việc cho từng khách truy cập, trong PHP nó tạo một file trong thư mục tạm (thư mục này cài đặt ở php.ini : session.save_path) để lưu thông tin này, thông tin này được dùng chung cho tất cả các trang mà khách truy cập. Mỗi khách truy cập, dựa vào thông tin trình duyệt gửi lên nó tạo (hoặc phục hồi) một Session riêng cho khách đó. Sự làm việc của Session có thể vắn tắt như sau:
Như vậy SESSION là cơ chế lưu trữ và phục hồi thông tin cho phiên làm việc (truy cập) của khách, nhằm trao đổi thông tin khi duyệt từ page này sang page khác. Để Session hoạt động thì còn liên quan tới hỗ trợ COOKIE từ trình duyệt. Ví dụ trong Chrome bạn block Cookie từ facebook, thì bạn không thể đăng nhập được facebook. Chạy Session - Lưu trữ và lấy thông tinSession trong PHP bắt đầu hoạt động sau khi bạn gọi hàm session_start(), hàm này sẽ phục hồi dữ liệu SESSION nếu đã có, nếu chưa nó sẽ tạo ra SESSION mới cho bạn. Để sử dụng khuyên nên gọi hàm này ngay khi bắt đầu của Page. Một cách khác mà không cần quan tâm đến gọi session_start() đó là thiết lập cho PHP tự động chạy hàm này bàng cách session.auto_start = 1 trong php.ini Khi mà hệ thống session trong PHP được chạy, mặc định nó sẽ gửi về trình duyệt một Cookie với tiền tố PHPSESSID, tất nhiên có thể thay đổi tiền tố này trong php.ini Ví dụ trang chạy thử Session startsession.php <?php if (session_id() === '') session_start(); echo "Session đang chạy";Kiểm tra bạn thấy có Cookie gửi về, cookie này dùng để phục hồi dữ liệu Session Biến toàn cục $_SESSION: kiểu mảng là nơi SESSION lưu trữ thông tin - cũng chính là dữ liệu phục hồi được giữa các trang, bạn truy cập biến này trong suốt vòng đời của session để lấy, lưu trữ thông tin. Bạn cũng nên dùng hàm isset() để kiểm tra một biến session nào đó đã có hay chưa. Ví dụ sau dùng SESSION để đếm số lần một khách truy cập vào website. Ví dụ đếm lượt truy cập trang của một khách countaccess.php <?php // Khởi tạo session PHP nếu chưa khởi tạo if (session_id() === '') session_start(); if( isset( $_SESSION['counter'] ) ) { // Đếm mỗi lần truy cập $_SESSION['counter'] += 1; } else { // Lần đầu truy cập $_SESSION['counter'] = 1; } $msg = "<p>Bạn là vào truy cập ". $_SESSION['counter'] . ' lần vào trang</p>'; echo $msg; ?> Bạn là vào truy cập 1 lần vào trangTrong đoạn code trên có sử dụng if (session_id() === '') để kiểm tra xem Session có tồn tại hay chưa, nếu có rồi mà bạn gọi session_start() có thể PHP sẽ cảnh báo lỗi Warning Khi có chạy Session thì dữ liệu trả về cho trình duyệt nó gửi kèm một mẩu tin nhỏ ở phần Header, dữ liệu này là Cookie liên quan đến ID của Session, để request trình duyệt lưu trữ, request tiếp theo nó sẽ gửi dữ liệu này đến Server và PHP sẽ phục hồi Session theo Cookie này. Hủy SessionBạn có thể hủy một biến, giá trị ... đã lưu vào Session:
Từ nắm vững Cookie và Session là cơ sở để xây dựng lên các hệ thống như cho phép user đăng nhập vào website, xây dựng ứng dụng giỏ hàng đặt hàng ... Source code: session_cookie (Git), hoặc tải rphp-sessioncookie
Session:Là phiên làm việc để lưu trữ 1 biến và biến đó có thể tồn tại từ trang này đến trang khác(cùng tên miền)Session được lưu trữ trên serverThời gian sống của nó sẽ kết thúc khi ta xoá nó hoặc hết tuổi thọ (tắt trình duyệt)Khi Session được tạo ra, php tạo 1 định danh duy nhất cho session đó, định danh này là chuỗi ký tự ngẫu nhiên của 32 số hexa.Ví dụ như: 3c7foj34c3jj973hjkop2fc937e3443Khi đó 1 cookies được gọi là PHPSESSID sẽ được tự động gửi đến máy người dùng để lưu trữ chuỗi định danh session duy nhất ở trênMột file được tự động tạo và lưu trên server trong 1 thư mục tạm thời đã được chỉ định và nó mang tên của định danh duy nhất và được bắt đầu bằng sess_.Ví dụ: sess_3c7foj34c3jj973hjkop2fc937e3443Hình ảnh minh hoạ: Để sử dụng session trước tiên chúng ta cần sử dụng hàm:session_start();Khởi tạo 1 session trong PHP ta dùng: $_SESSION<"session_name"> = "session_value";Sử dụng session: $_SESSION<"session_name">;Huỷ 1 session: unset($_SESSION<"session_name">);Xoá bỏ hết tất cả session: session_destroy();CookiesCookies là 1 phần dữ liệu được lưu trên máy khách, mỗi khi máy khách yêu cầu đến máy chủ nào đó, thì nó sẽ gửi phần dữ liệu được lưu trong cookies tương ứng tới máy chủ đóMột cookies có độ lớn giới hạn bởi trình duyệt là 4kbBrowsers giới hạn số cookies lưu trữ trên 1 server là khoảng 50 cookiessetcookie(name, value, time, path, domain, security);name: tên của biến cookies (bắt buộc)value: value của cookiestime: thời gian sống của cookiespath: thư mục mà cookies có hiệu lựcdomain: tên miền mà cookies có hiệu lựcsecurity: Nếu là 1 thì cookies chỉ được gửi bằng đường dẫn an toàn HTTPS, nếu là 0 thì cookies có thể gửi bằng HTTP thông thườngVới Cookies, có 3 bước để xác định người dùng cũ:Server gửi 1 tập tin bao gồm thông tin của người dung(tên, tuổi, ....)Trình duyệt sẽ lưu lại trên local để sử dụng trong tương laiKhi trình duyệt gửi bất cứ request nào đến server thì nó sẽ gửi luôn thông tin của cookies đó lên server và server đó sẽ sử dụng thông tin đó để xác thực người dùng nàyHình ảnh minh hoạ: Sử dụng Cookies: $_COOKIE<"cookie_name">;Để xoá 1 cookies ta chỉ cần set thời gian sống của nó sang giá trị âm lớn hơn hoặc bằng giá trị sống lúc ban đầu thiết lập:Ví dụ: setcookie("username", "", time()-3600);So sánh session và cookiesSessionCookies
Câu trả lời là còn tuỳ vào ý đồ của lập trình viên. Nếu cần lưu những thông tin bảo mật thì nên dùng session Nếu muốn gửi dữ liệu nhanh và không cần bảo mật cao thì nên dùng cookies Trên đây là một số vấn đề về session và cookiesRất cám ơn các bạn đã đọc và rất mong giúp các bạn biết thêm về session và cookies.Xin chân thành cảm ơn! |